Django:消息系统,请求

时间:2016-02-13 11:46:03

标签: python django django-models

我想在我的网站上安装一个消息系统。 为此,我想为每个发件人和收件人选择:

  • 发件人的用户名 - 收件人的用户名 - 最后一条消息 - 此最后一次交换消息的日期 - 已交换消息的总数。

我的模特是这样的:

class MessagePerso(models.Model):
    text = models.CharField(max_length=200)
    date_sent = models.DateTimeField(auto_now_add=True,editable=False)
    read_at = models.DateTimeField(("read at"), null=True, blank=True)

class Conversation(models.Model):
    sender = models.ForeignKey(User,null=False,related_name="sender")
    recipient = models.ForeignKey(User,null=False,related_name="recipient")
    title = models.CharField(max_length=90)
    created_at = models.DateTimeField(auto_now_add=True,editable=False)
    messages = models.ManyToManyField(MessagePerso)

现在,我有这个:

u = request.user    
Conversation.objects.filter(Q(sender=u)|Q(recipient=u)).annotate(nbMsg=Count('messages'),date=Max('messages__date_envoie')).values('sender__username','recipient__username','nbMsg','date').order_by('date')   

它有效但我也想要最后一条消息的文本(模型MessagePerso)......

如何制作?

1 个答案:

答案 0 :(得分:1)

如果您想使用您的模型并获取指定用户的消息,例如request.user,您可以像这样使用它:

user_messages = MessageBetweenUsers.objects.filter(recepient=request.user)

它将返回发送给当前用户的所有消息。

如果您想获取与此用户相关的所有消息,您可以这样做:

from django.db.models import Q

all_messages = MessageBetweenUsers.objects.filter(Q(sender=request.user)|Q(recepient=request.user)

然后,您可以使用此查询集来获取邮件计数,发件人和收件人姓名等。