如何解决如何在 Django 聊天应用程序中创建对话列表
我正在尝试向我用 Django 制作的网络应用程序添加消息传递功能。
到目前为止,我已经成功地在用户之间发送和接收消息。
但是,现在我一直在向登录用户的 inBox.html
页面显示所有对话列表。
我尝试了我能想到的不同方法,但都没有得到预期的结果。
models.py
class Messaging(models.Model):
sender = models.ForeignKey(User,on_delete=models.CASCADE,related_name='sender')
receiver = models.ForeignKey(User,related_name='receiver')
message_text = models.TextField(max_length=360,verbose_name='Write Message')
message_date = models.DateTimeField(auto_Now_add=True)
def __str__(self):
return f'{self.sender}\'s Message to {self.receiver}'
@login_required
def messageview(request,user_name):
sender_user = request.user
receiver_user = User.objects.get(username=user_name)
message_list = Messaging.objects.filter(sender=sender_user,receiver=receiver_user).order_by('message_date') | \
Messaging.objects.filter(receiver=sender_user,sender=receiver_user).order_by('message_date')
if request.method == 'POST':
msg_text = request.POST.get('msg_text')
messaging = Messaging()
messaging.sender = sender_user
messaging.receiver = receiver_user
messaging.message_text = msg_text
messaging.save()
return redirect(request.Meta['HTTP_REFERER'])
context = {
'sender_user': sender_user,'receiver_user': receiver_user,'message_list': message_list,}
return render(request,'message.html',context)
现在我想在 inBoxview
中创建一个 views.py
来呈现登录用户的所有对话。
假设我在数据库 A 和 B 中有两个用户,他们之间交换了 4 条消息。我想要的是将对话显示为一个列表,在这种情况下只有一个。例如,登录的用户是A,他与用户B 和C 交换消息。收件箱将显示两行。当用户A点击其中任何一行时,他将被带到该用户对应的详细信息页面。它有点像 WhatsApp 或 Messenger。希望我能解释一下。
我能够做到这一点:
请给我指路。
解决方法
你可以尝试这样的事情。
此视图将查询 Messaging
模型并获取 sender
或 receiver
是登录用户的所有条目。
@login_required
def inbox(request,user):
# Get all the records where either sender OR receiver is the logged in user
messages = Messaging.objects.filter(sender=request.user) | Messaging.objects.filter(receiver=request.user)
context = {'messages': messages}
return render(request,'inbox.html',context)
您可以在上述代码中添加任何符合您要求的额外代码行。
inbox.html
{% for message in messages %}
# You can show your message details here
{% endfor %}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。