猿问

Django对象order_by给我重复的用户

我正在尝试获取所有用户(除外request.user),并按他们收到的最后一条消息的日期时间对其进行排序。也许我做错了。


@login_required

def get_users(request):

    if request.method == 'POST':

        users = list(User.objects.filter(~Q(username = request.user))

            .order_by('personal_messages__sent_date').values())

        return HttpResponse(dumps({'users': users}))

    return redirect('message:index')

dumps来自json_tricks。Vue.js对象通过JS fetch

My models.py接收数据


from django.db import models

from django.conf import settings


    class PersonalMessage(models.Model):

        text = models.TextField()

        sender = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='personal_messages', null=True, on_delete=models.SET_NULL)

        recipient = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.SET_NULL)

        sent_date = models.DateTimeField('sent date', auto_now_add=True)

问题是,如果我只做得users = list(User.objects.filter(~Q(username = request.user)).values())很好,但是如果我添加order_by,users = list(User.objects.filter(~Q(username = request.user)) .order_by('personal_messages__sent_date').values())我将为每个用户获得重复项。如果用户与n条消息链接,似乎它会向每个用户返回n次。

也许还有另一种方式。

任何想法?


陪伴而非守候
浏览 189回答 1
1回答

临摹微笑

您需要使用聚合,查询如下所示:User.objects.filter(    ~Q(username = request.user)).annotate(    last_message_sent_date=Max('personal_messages__sent_date')).order_by(    'last_message_sent_date')
随时随地看视频慕课网APP

相关分类

Python
我要回答