Django消息应用程序-将消息显示为对话

问题描述

我从Django开始,对Django-messages应用程序一目了然。我决定遵循他们的方式。感谢 parent_message timestamp ,我们可以显示视图对话(发送者和接收者)。

在我的message_view.html中,我得到了最后一条消息(实际上是来自用户的消息),并且由于回复视图,我有可能回答该消息。

任何人都没有关于如何显示整个对话的想法。我进入了模板的前两个步骤:

  • 最后一条消息(message.id,实际上是来自用户的消息)
  • 回答形式()
  • 所有对话(message.id的parent_messages和时间戳)

message / models.py

class Message(models.Model):
     sender = models.ForeignKey(User,on_delete=models.CASCADE,related_name='sender')        
     receiver = models.ForeignKey(User,related_name='receiver')        
     message = models.CharField(max_length=1000)
     parent_message = models.ForeignKey('self',related_name='next_messages',null=True,blank=True,on_delete=models.SET_NULL)
     timestamp = models.DateTimeField(auto_Now_add=True)
     read_at = models.DateTimeField(_("read at"),blank=True)
     replied_at = models.DateTimeField(_("replied at"),blank=True)     
     #is_read = models.BooleanField(default=False)
     
     def new(self):
         if self.read_at is not None:
             return False
         return True

     def replied(self):
         if self.replied_at is not None:
             return True
         return False
     
     def __str__(self):
           return self.message
     class Meta:
           ordering = ('timestamp',)
           
     def inBox_count_for(user):
         return Message.objects.filter(receiver=user,read_at__isnull=True).count() 

message / views.py

@login_required
def view(request,message_id,form_class=ComposeForm,quote_helper=format_quote,subject_template=_(u"Re: %(subject)s"),template_name='message_view.html'):

    user = request.user
    Now = timezone.Now()
    message = get_object_or_404(Message,id=message_id)
    if (message.sender != user) and (message.receiver != user):
        raise Http404
    if message.read_at is None and message.receiver == user:
        message.read_at = Now
        message.save()

    context = {'message': message,'reply_form': None}
    if message.receiver == user:
        form = form_class(initial={
            'message': quote_helper(message.sender,message.message),'receiver': [message.sender,]
            })
        context['reply_form'] = form
    return render(request,template_name,context)  

def reply(request,template_name='message_compose.html',success_url=None,receiver_filter=None,):
   
    parent = get_object_or_404(Message,id=message_id)

    if parent.sender != request.user and parent.receiver != request.user:
        raise Http404

    if request.method == "POST":
        sender = request.user
        form = form_class(request.POST,receiver_filter=receiver_filter)
        if form.is_valid():
            form.save(sender=request.user,parent_message=parent)
            messages.info(request,_(u"Message successfully sent."))
            if success_url is None:
                success_url = reverse('message:messages_inBox')
            return HttpResponseRedirect(success_url)
    else:
        form = form_class(initial={
            'message': quote_helper(parent.sender,parent.message),'receiver': [parent.sender,]
            })
    return render(request,{
        'form': form,})  

templates / message_view.html

<div class="Box-comment">
                <div class="card_user_image_left"><img src="{{ message.sender.userprofile.image.url }}" width="40px" height="40px" style="border-radius: 90px;background: #ffffff38;"></div>
                <div class="card_user_message_left"><strong><a href="{% url 'user:user_public_cookwall' slug=message.sender.userprofile.slug %}" class="search_user_link">{{ message.sender }}</a> {{ message.sender.userprofile.smiley|safe }}</strong><small> {{ message.timestamp }}</small><p>{{ message.message|linebreaksbr }}</p></div>
            </div>
            <br>
            
            <div>
             
            <form action="{% url 'message:messages_reply' message.id %}" method="post">
                {% csrf_token %}
            
                {{ reply_form.as_table }}

            <input type="submit" class="btn btn-primary single-input textinput textInput form-control" value="Reply to {{ message.sender }}"/>
            </form> 
          </div>   
          </div>

message / urls.py

url(r'^reply/(?P<message_id>[\d]+)/$',reply,name='messages_reply'),url(r'^message/(?P<message_id>[\d]+)/$',view,name='messages_detail'),

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)