Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django对象按“给我重复的用户”排序_Python_Django_Django Models_Django Views - Fatal编程技术网

Python Django对象按“给我重复的用户”排序

Python Django对象按“给我重复的用户”排序,python,django,django-models,django-views,Python,Django,Django Models,Django Views,我正在尝试获取所有用户(除了请求.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

我正在尝试获取所有用户(除了
请求.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\u技巧。 数据由具有js fetch的Vue.js对象接收
我的模特

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\u by
users=list(User.objects.filter(~Q(username=request.User)).order\u by('personal\u messages\u sent\u date')。values())
我会为每个用户获得重复的订单。如果用户链接了n条消息,则似乎会返回每个用户n次。
也许还有别的办法。
有什么想法吗?

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

User.objects.filter(
    ~Q(username = request.user)
).annotate(
    last_message_sent_date=Max('personal_messages__sent_date')
).order_by(
    'last_message_sent_date'
)
您需要使用,查询如下所示:

User.objects.filter(
    ~Q(username = request.user)
).annotate(
    last_message_sent_date=Max('personal_messages__sent_date')
).order_by(
    'last_message_sent_date'
)