Django:不同的用户过滤 [英] Django: Distinct Users Filtering

查看:47
本文介绍了Django:不同的用户过滤的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试构建一个消息传递应用程序.这是我的模特,

I'm trying to build a messaging app. Here's my model,

class Message(models.Model):
    sender = models.ForeignKey(User, related_name="sender")
    receiver = models.ForeignKey(User, related_name="receiver")
    msg_content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

这是我尝试过的,

data = Message.objects.filter(Q(sender=request.user) | Q(receiver=request.user))

在模板中,

{% for abc in data %}
    {{ abc.receiver }} <br/>
{% endfor %}

在这里,我想过滤不同的接收者,并根据最近 request.user 向谁发送新消息的事实(如我们在社交媒体平台上看到的那样)对它们进行重新排序.我该怎么办?

Here i wants to filter the distinct receivers and re-order them based upon the fact that to whom request.user sent new message recently (as we see on social media platforms). How can I do that?

推荐答案

您需要编写两个查询.一种是获取所有消息,另一种是按顺序获取收件人列表.以下代码中的receiver_list将为您提供接收者列表.根据收件人列表,您可以过滤出模板中的消息.

You need to write two queries. One is to fetch all the messages and another to get recipient list in order. receiver_list in following code will give you receiver list. Based on receiver list, you can filter out messages in template.

from django.db.models.aggregates import Max
data = Message.objects.filter(Q(sender=request.user) | Q(receiver=request.user))
receiver_list = data.filter(sender=request.user).values('receiver').annotate(max_time=Max('created_at').order_by('-max_time')

这篇关于Django:不同的用户过滤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆