2016-02-13 138 views
1

我想在我的網站上安裝消息系統。 對於這一點,我想選擇爲每個發件人和收件人:發件人的Django:消息系統,請求

  • 用戶名 - 收件人的 用戶名 - 最新消息 - 這最後的交換消息的日期 - 交換的消息總數。

我的模式是這樣的:

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

如果你想使用你的模型,並得到消息指定的用戶,例如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) 

然後你可以使用這個查詢集來獲取消息計數,發送者和recepient名稱等

+0

是的,但我想通過與其他用戶的談話來計算消息。我將繼續嘗試搜索解決方案 – Zoulou

+0

我修改了我的模型(編輯後),但我遇到了一個問題 – Zoulou