1

所以在我的 Django 项目中,我创建了一个 Notification 模型,它有两个 datetime 字段,一个是时间戳,一个是截止日期。截止日期是可选的。现在我有一个通知列表,有些有截止日期,有些没有。它们都有一个时间戳。我要做的是使用具有该字段的通知的到期日期和没有该可选字段的通知的时间戳将它们排序在列表中。如您所见,我使用两个字段作为键有点奇怪,但它们都是日期时间字段。所以我认为他们应该能够比较。

我的代码:

class Notifications(models.Model):
date = models.DateTimeField(auto_now=True)
title = ...
content = ...
due_date = models.DateTimeField(null=True, blank=True)
4

1 回答 1

2

您想使用 SQL COALESCE

COALESCE函数接受参数列表,返回列表中的第一个非 Null 值:

我不认为它有一个 django 聚合函数,但你可以这样做:

Notifications.objects.filter(**some_filter_args)
  .extra(select={"sortdate" : 'COALESCE("due_date", "date")'})
  .order_by("-sortdate") 
于 2012-08-02T22:58:57.403 回答