Django User to User Messaging ModelForm Setup

时间:2018-02-21 05:23:22

标签: python django django-queryset

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

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)

为了完整性,home.models Profile类在下面,虽然这不是问题。

home.models.py

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

forms.py

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方法中定义查询集来弄清楚如何过滤并拉出“当前用户”在收件人列表中的所有邮件。问题是我在执行此查询时遇到问题,而且我在Stack Overflow上找到的所有问题都是较旧的(大约2013年),或者我看不出它们如何直接解决我的问题。

我尝试过使用shell并搜索

等内容
message = Message.objects.first()
message.recipient.all()

显示以下内容

<QuerySet [<Profile: jeff>, <Profile: joe>, <Profile: billy>]>

这似乎表明查询集的组成对象都是Profile类的所有对象,但是当我尝试搜索这样的东西时:

Message.objects.filter(recipient__profiles__in='billy')

我收到以下错误:

raise FieldError('Related Field got invalid lookup: {}'.format(lookups[0]))
django.core.exceptions.FieldError: Related Field got invalid lookup: profiles

我尝试了许多不同的路径无济于事,我想我只是不理解搜索功能。基本上我所要做的就是创建一个收件箱(查找当前用户在收件人列表中的所有邮件),经过一段时间在线查看我不知所措。

1 个答案:

答案 0 :(得分:2)

尝试使用

<textarea class="first" placeholder="Enter Address.."></textarea>
<textarea class="second" placeholder=" Enter Address.."></textarea>