不同的用户过滤

时间:2017-12-22 05:22:25

标签: python django

我试图在django中创建一个消息传递应用程序,但我无法正确地重新订购用户

这是模特,

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)

这是视图,

def message(request):
    users = Message.objects.filter(Q(sender=request.user) | Q(receiver=request.user)).values('sender__first_name', 'receiver__first_name', 'receiver__id', 'sender__id').annotate(Max('id')).order_by('-id__max')
    return render(request, 'chat/users.html', {'users': users})

这是我在模板中尝试的内容,

{% for user in users %}
    {% if user.sender__id != request.user.id %}
        {{ user.sender__first_name }}
    {% else %}
        {{ user.receiver__first_name }}
    {% endif %}
{% endfor %}

这段代码看起来工作得很好,但它返回了相同的用户"两次"只要request.user向某人发送消息&那个人回复它。

如何解决此问题?谢谢 。 。

1 个答案:

答案 0 :(得分:1)

使用以下查询:

def message(request):
    users = Message.objects.filter(Q(sender=request.user) | Q(receiver=request.user)).values('sender__first_name', 'receiver__first_name', 'receiver__id', 'sender__id').annotate(Max('id', distinct = True)).order_by('-id__max')
return render(request, 'chat/users.html', {'users': users})

希望它能奏效。