在Django中,您可以定义default ordering of models with the ordering
meta option。
如果你的模特是:
class Event(models.Model):
title = models.TextField()
start_date = models.DateField()
end_date = models.DateField(null=True, blank=True)
我们可以修复模型的顺序,如下所示:
class Meta:
ordering = ['-end_date','-start_date']
哪个会将具有最新结束日期的事件放在第一位,而对于具有最近开始日期的事件进行平局排序的情况。
但是,某些事件可能仍在发生,因此可以为end_date
。这些是系统中最近发生的最新事件,但这些事件是在之后其他所有事件中订购的。
在Django中,如何在日期字段中指定ordering
以使其下降,但首先显示null
个字段?
如果这不可能,我如何编写该字段的查询以获得相同的效果?
答案 0 :(得分:1)
我查看了Django的数据库代码,看起来Django没有提供任何钩子来自定义'ordering'元选项的处理,它所做的就是用{{1}生成SQL的ORDER BY
部分你提供的。我不知道是否有任何数据库允许用户自定义特定数据类型的比较功能。
如果做不到这一点,我会在解决问题时看到一些替代方案:
答案 1 :(得分:0)
我知道我参加聚会迟到了,但我刚刚遇到了这个完全相同的问题,解决方案是使用 query expressions 中所述的 docs,如下所示:
ordering = (F("end_date").desc(nulls_first=True))