Python Django用户到用户消息传递模型表单设置

Python Django用户到用户消息传递模型表单设置,python,django,django-queryset,Python,Django,Django Queryset,我正在尝试为我的站点构建自己的自定义用户对用户消息应用程序。我知道邮递员和其他人,但我做我自己的有两个原因:1。更加熟悉Django,2。包括今后进一步定制的可能性。因此,我试图创建一个简单的模型和模型表单来使用,但我得到了一个错误。下面是我的代码 型号.py from django.db import models from home.models import Profile class Message(models.Model): recipient = models.ManyT

我正在尝试为我的站点构建自己的自定义用户对用户消息应用程序。我知道邮递员和其他人,但我做我自己的有两个原因:1。更加熟悉Django,2。包括今后进一步定制的可能性。因此,我试图创建一个简单的模型和模型表单来使用,但我得到了一个错误。下面是我的代码

型号.py

from django.db import models
from home.models import Profile

class Message(models.Model):
    recipient = models.ManyToManyField(Profile, related_name = 'recipient')
    sender = models.ForeignKey(Profile, on_delete = models.CASCADE, related_name = 'sender')
    subject = models.CharField(max_length = 1000, blank = True)
    message = models.TextField()
    sent = models.DateTimeField(auto_now_add = True)
    unread = models.BooleanField(default = True)

    def __str__(self):
        return 'Message from ' + str(self.sender) + '.  Subject:' + str(self.subject)
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, null = True)
    bio = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birth_date = models.DateField(null=True, blank=True)

    def __str__(self):
        return self.user.username
from django.forms import ModelForm
from django.contrib.auth.models import User
from messenger.models import Message

class MessageForm(ModelForm):
    class Meta:
        model = Message
        fields = ('recipient','sender','subject','message','unread')
为完整起见,home.models概要文件类如下所示,尽管这不是问题所在

home.models.py

from django.db import models
from home.models import Profile

class Message(models.Model):
    recipient = models.ManyToManyField(Profile, related_name = 'recipient')
    sender = models.ForeignKey(Profile, on_delete = models.CASCADE, related_name = 'sender')
    subject = models.CharField(max_length = 1000, blank = True)
    message = models.TextField()
    sent = models.DateTimeField(auto_now_add = True)
    unread = models.BooleanField(default = True)

    def __str__(self):
        return 'Message from ' + str(self.sender) + '.  Subject:' + str(self.subject)
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, null = True)
    bio = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birth_date = models.DateField(null=True, blank=True)

    def __str__(self):
        return self.user.username
from django.forms import ModelForm
from django.contrib.auth.models import User
from messenger.models import Message

class MessageForm(ModelForm):
    class Meta:
        model = Message
        fields = ('recipient','sender','subject','message','unread')
forms.py

from django.db import models
from home.models import Profile

class Message(models.Model):
    recipient = models.ManyToManyField(Profile, related_name = 'recipient')
    sender = models.ForeignKey(Profile, on_delete = models.CASCADE, related_name = 'sender')
    subject = models.CharField(max_length = 1000, blank = True)
    message = models.TextField()
    sent = models.DateTimeField(auto_now_add = True)
    unread = models.BooleanField(default = True)

    def __str__(self):
        return 'Message from ' + str(self.sender) + '.  Subject:' + str(self.subject)
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, null = True)
    bio = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birth_date = models.DateField(null=True, blank=True)

    def __str__(self):
        return self.user.username
from django.forms import ModelForm
from django.contrib.auth.models import User
from messenger.models import Message

class MessageForm(ModelForm):
    class Meta:
        model = Message
        fields = ('recipient','sender','subject','message','unread')
我只是想通过在视图的get方法中定义queryset,找出如何过滤和提取收件人列表中“当前用户”所在的所有消息。问题是我在执行此查询时遇到问题,我在堆栈溢出上发现的所有问题要么都比较老(大约2013年),要么我看不出它们如何直接解决我的问题

我试过使用shell并搜索类似的东西

message = Message.objects.first()
message.recipient.all()
这显示了以下内容

<QuerySet [<Profile: jeff>, <Profile: joe>, <Profile: billy>]>
我得到以下错误:

raise FieldError('Related Field got invalid lookup: {}'.format(lookups[0]))
django.core.exceptions.FieldError: Related Field got invalid lookup: profiles
我尝试了许多不同的途径,但都没有成功,我想我只是不了解搜索功能。基本上,我所要做的就是创建一个收件箱(查找当前用户在收件人列表中的所有邮件),在网上查看了一段时间后,我就不知所措了。

尝试使用

Message.objects.filter(recipient__user__username__in=['billy'])
尝试使用

Message.objects.filter(recipient__user__username__in=['billy'])