2015-11-11 188 views
1

我在我的學習項目中有簡單的消息模型。django中的消息通知

class Message(models.Model): 

    sender = models.ForeignKey(CustomUser, related_name='sender') 
    reciever = models.ForeignKey(CustomUser, related_name='reciever') 
    text = models.TextField() 
    created_at = models.DateTimeField(auto_now_add=True) 

我該如何向request.user發送有關新消息的通知。
即我需要通知發送到request.user如果我有request.user新Message對象reciever

UPD我的觀點:

def dialog(request, user_pk): 

    sent = Message.objects.filter(reciever_id=user_pk, sender_id=request.user.pk) 
    recieved = Message.objects.filter(reciever_id=request.user.pk, sender_id=user_pk) 
    mate = CustomUser.objects.get(pk=user_pk) 

    dialog_list = sorted(chain(sent, recieved), key=lambda a:a.created_at) 

    if request.POST: 

     form = MessageForm(request.POST) 
      if form.is_valid(): 
       f = form.save(commit=False) 
       f.sender = CustomUser.objects.get(pk=request.user.pk) 
       f.reciever = CustomUser.objects.get(pk=user_pk) 
       form.save() 
    else: 
     form=MessageForm() 

    return render(request, 'dialog.html', {'sent':sent, 
    'recieved':recieved, 'form':form, 'mate':mate, 'dialog_list':dialog_list}) 

看是這樣的: enter image description here

+1

這是一個很廣泛的問題;如果你可以更具體地說明你正在嘗試做什麼,或者你已經嘗試過那些沒有奏效的東西,那將會很有幫助。 – nthall

+0

我只是想建議。我想我需要在我的'Message'模型中使用標誌,就像request.user中的「被查看」和「不」。然後通過'request.user'在我的數據庫中檢查「not viewed」'Message.reciever'。但我現在不怎麼能做到這一點 –

+1

那麼,未讀的國旗是一個好主意。 [BooleanField](https://docs.djangoproject.com/en/1.8/ref/models/fields/#booleanfield)是您想要的字段。然後,在適當的視圖中,您可以使用[queryset filtering](https://docs.djangoproject.com/en/1.8/topics/db/queries/#retrieving-specific-objects-with-filters)檢查消息。 – nthall

回答

0

我解決了這個問題,通過製作一些難看的邏輯
用布爾字段更新我的模型:

class Message(models.Model): 

    sender = models.ForeignKey(CustomUser, related_name='sender') 
    reciever = models.ForeignKey(CustomUser, related_name='reciever') 
    text = models.TextField(verbose_name='') 
    created_at = models.DateTimeField(auto_now_add=True) 
    is_readed = models.BooleanField(default=False) 

鑑於我創建set我的消息,並在這裏添加用戶,誰擁有is_readed == False
消息它成爲True當我們加載對話頁面與該用戶
我從來沒有在真正的項目工作,但我認爲這種解決方案不可接受這裏。
反正在我的第一個研究項目它的工作,也許幫助一些新手,像我這樣的強調文本

def dialog(request, user_pk): 

    sent = Message.objects.filter(reciever_id=user_pk, sender_id=request.user.pk) 
    recieved = Message.objects.filter(reciever_id=request.user.pk, sender_id=user_pk) 
    not_readed = set() 

    for message in recieved: 
     message.is_readed = True 
     message.save() 

    for message in Message.objects.filter(reciever_id=request.user.pk): 
     if message.is_readed ==False: 
      not_readed.add(CustomUser.objects.get(pk=message.sender_id)) 

    dialog_list = sorted(chain(sent, recieved), key=lambda a:a.created_at) 

    if request.POST: 

     form = MessageForm(request.POST) 
     if form.is_valid(): 
      f = form.save(commit=False) 
      f.sender = CustomUser.objects.get(pk=request.user.pk) 
      f.reciever = CustomUser.objects.get(pk=user_pk) 
      form.save() 
    else: 
     form=MessageForm() 

    return render(request, 'dialog.html', {'sent':sent, 
    'recieved':recieved, 'form':form, 'mate':mate, 
    'dialog_list':dialog_list, 'not_readed':not_readed})