为了账号安全,请及时绑定邮箱和手机立即绑定

Django对象order_by给我重复的用户

Django对象order_by给我重复的用户

陪伴而非守候 2021-05-09 13:36:35
我正在尝试获取所有用户(除外request.user),并按他们收到的最后一条消息的日期时间对其进行排序。也许我做错了。@login_requireddef 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 fetchMy models.py接收数据from django.db import modelsfrom 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次。也许还有另一种方式。任何想法?
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

您需要使用聚合,查询如下所示:


User.objects.filter(

    ~Q(username = request.user)

).annotate(

    last_message_sent_date=Max('personal_messages__sent_date')

).order_by(

    'last_message_sent_date'

)


查看完整回答
反对 回复 2021-05-18
  • 1 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号