我想按两列对表格进行排序。对于第一列,我想按值或 NULL 的存在进行排序。
无效代码来说明我想要做什么:
MyModel.objects.order_by('blop IS NULL', 'name')
我尝试使用注释,但没有找到定义表达式来设置字段的方法,或定义聚合函数来从字段返回 bool 值的方法。
无法运行的代码来说明我的尝试:
MyModel.objects.annotate(has_blop=F('blop IS NULL')).order_by('has_blop', 'name')
我认为我可以使用条件注释(Case...When...)来管理,但这似乎有点过分了。
使用的数据库是postgres。
最佳答案
您可以按条件Q(blop=None)
进行排序。然而,它需要 ExpressionWrapper
[Django-doc]将条件转换为 bool 字段:
from django.db.models import BooleanField, ExpressionWrapper, Q
MyModel.objects.order_by(
ExpressionWrapper(<b>Q(blop=None)</b>, BooleanField()).asc(),
'name'
)
关于django - 如何使用 Django ORM 按值的存在或 null 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62570981/