在django中逐场获取最早的物体

时间:2016-04-29 12:41:13

标签: django performance model

我的模型中有date_updated字段。我想得到date_updated时间最长或为空/空白的对象 我怎样才能以最有效的方式做到这一点?

class Product(models.Model):
    date_updated = models.DateTimeField(auto_now_add=False, auto_now=True, null=True)
    date_added = models.DateTimeField(auto_now_add=True, auto_now=False)

3 个答案:

答案 0 :(得分:0)

oldest_date = YourModel.objects.all().order_by("-date_updated")[0]

但是,我不确定这对Null值有何影响。确保您可以单独处理它们:

oldest_date = YourModel.objects.exclude(date_updated=None).order_by("-date_updated")[0]

never_updated = YourModel.objects.filter(date_updated=None)

答案 1 :(得分:0)

好吧,您可以使用Foo.objects.all().order_by('-date_updated').last()来获取最早的版本。但是null / blank选项会出现问题,因为它可能会以特定的顺序返回多个对象。我想你可以选一个。

如果您正在尝试获取最旧版本,包括那些从未更新的版本,您可以在创建对象时将date_update设置为NOW()(这就是我所做的)。

答案 2 :(得分:0)

如果您想优先考虑None的元素,可以使用queryset method .latest([field])

YourModel.objects.latest('date_updated')

如果至少有一个为空,它将返回最近的日期或第一个日期(在Meta模型中设置默认排序)。