我想创建一个查询集,该查询集可以按用户发送或接收的最后一条消息的创建日期有效地对用户进行排序(就像大多数聊天界面一样)。我正在使用Django私人聊天,该聊天使用this simple model发送消息。
考虑到先前的模型,我根本不知道如何编写order_by
语句。注释,在这种情况下,子查询或其他查询表达式会很方便。
users = User.objects.filter(
username__icontains=user,
id__in=request.user.followers
).order_by( ????? )
答案 0 :(得分:0)
您应该可以使用annotate
之类的东西来做到这一点;
from django.db.models import Max
users = User.objects.filter(
username__icontains=user,
id__in=request.user.followers
).annotate(
last_message=Max('messages_created')
).order_by('-last_message')
Max
函数从Message
模型中获得相关名称,找到here,然后从该模型的created
时间戳中获得