我正试图让queryset以特定的方式进行订购,但不知道如何进行订购
首先,我希望它按end_date
降序排序,将所有空的end_date
记录首先分组
然后列表应该按primary
字段排序,然后按降序amount
queryset = MyModel.exclude_denied.filter(user=user).order_by(
"end_date", "primary", "-amount"
)
这是我目前拥有的,但它没有完全返回它,因为我喜欢它
我希望这些组显示如下:
没有end_date
的项目
primary
项先列出,然后按descamount
排序带有end_date
的项
primary
项先列出,然后按descamount
排序我试图实现这样一个查询集:
ItemA - end_date:None - primary:True
ItemB - end_date:None - primary:False
ItemC - end_date:None - primary:False
ItemD - end_date:08/10/2018 - primary:True
ItemE - end_date:07/10/2019 - Primary:False
ItemF - end_date:06/08/2018 - Primary:False
ItemG - end_date:04/16/2017 - Primary:False
尝试使用order_by
适当的方法创建这个订单吗?我觉得离这儿很近,但不太近
我认为一个更好的方法是创建两个查询集,然后将它们合并在一起保持它们的顺序
像这样:
Queryset1=没有end_date
的项,降序primary
,然后降序amount
Queryset2=items与end_date
(desc),降序primary
,然后降序amount
合并这两个查询集,但先按顺序列出Queryset1项,然后列出Queryset2项
我不确定实现这一目标的最佳方式,但我认为这将是最好的解决方案
我在寻找如何实现这一目标的建议
您可以使用F() to sort null values,类似于:
更新
经过反复的评论和重读你的问题之后,我突然想到,你并不是真的想对
end_date
的值排序,而是只想对它是否为null排序。可能有更好的方法可以将end_date is NULL
直接转换为布尔值,但我认为这应该是可行的:相关问题 更多 >
编程相关推荐