【发布时间】:2018-12-03 16:32:06
【问题描述】:
我在 django 模型中订购两个日期时遇到问题。我有一个模型,它记录如下文件:
class Document(models.Model):
document_title = models.CharField(max_length=100)
document = models.FileField()
date_of_signature = models.DateField()
date_of_rectification = models.DateField(null=True, blank=True)
class Meta:
ordering = ['-date_of_signature', '-date_of_rectification']
我使用 Meta Options.ordering 类来订购日期并得到订购结果,但我的具体问题是:
- 如果两个字段都有日期,则应根据这两个字段排序。
- 但是
date_of_rectification可以是null值,所以如果它是null,那么订购必须使用最新的date_of_signature,而我没有使用元类Options.ordering
我在 stackoverflow 上搜索了很多问题,发现这个 MySQL 查询 Mysql order items by the newest of 2 dates 完全解决了我在 MySQL 数据库中的问题,并在 django Manager.raw() 上实现了这个查询,如下所示,我得到了预期的结果。但这并没有帮助我在 Django Admin 上订购数据,这不是我的要求。而且我还想知道这个查询是否可以使用 django Queryset insted of RawQueryset 来解决。
Model.objects.raw("""SELECT * FROM document
ORDER BY IF(date_of_rectification > date_of_signature,
date_of_rectification, date_of_signature)""")
【问题讨论】:
标签: python mysql django django-models