python - django-我如何为查询创建排序以将一个特定元素放在第一位,然后按某个字段保留?

标签 python django sorting django-rest-framework

具体来说,我希望获得用户的查询。我的 User 模型有一个 first_namelast_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/

相关文章:

algorithm - 空间复杂度与辅助空间复杂度

c# - 困难的层次排序

mysql - 如何在 3 组之间轮换数据?

python - 如何使用幻像和基本 http 身份验证调试 selenium webdriver?

python - 缺少项算术级数 - 清理我的代码

python - 如何使用python从postgresql中选择像100这样没有[(100),]的数据?

django - Django 交易中如何提供 ACID 属性?

python - 大量记录之间的高效关联计算

python - 即使引发异常,AssertRaises 也会失败

python - Django管理错误 'WSGIRequest'对象没有属性“用户”