具体来说,我希望获得用户的查询。我的 User
模型有一个 first_name
和 last_name
字段。我需要做的是将 request.user
排序在结果的顶部,其余用户按 last_name、first_name
按字母顺序排列。最后一部分很简单:
q = User.objects.all().order_by('last_name', 'first_name')
但是我不确定如何确保 request.user
是查询中的第一个结果。这一切都是针对 django 休息框架 View 完成的,因此(我相信)我需要通过传递到序列化器的查询来完成它。
最佳答案
首先,不这样做可能是更好的设计。如果需要,可以让其他端点返回您自己的用户对象,并且在 ListView 中对待自己没有什么不同。但如果你真的需要的话。
您可能可以使用注释。
User.objects.annotate(is_me=Case(
When(pk=request.user.pk, then=Value(True)),
When(pk__ne=request.user.pk, then=Value(False)),
output_field=BooleanField())
).order_by('-is_me')
关于python - django-我如何为查询创建排序以将一个特定元素放在第一位,然后按某个字段保留?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48569659/