不同的用户过滤

问题描述 投票:0回答:1

我正在尝试在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向某人发送消息并且该人回复它,它返回相同的用户“Twice”。

我该如何解决这个问题?谢谢 。 。 。

python django
1个回答
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})

希望它会奏效。

© www.soinside.com 2019 - 2024. All rights reserved.