在Django中按第一个外键排序

时间:2019-05-12 07:35:58

标签: python django django-models foreign-keys

考虑以下两个简单模型:

from django.db import models

class Foo( models.Model ):
  pass

class Bar( models.Model ):
  time = models.DateTimeField( auto_now_add=True )
  foo = models.ForeignKey(
    Foo,
    on_delete=models.CASCADE
    related_name='bars'
  )

如何通过第一个相关的Foo对象排序Bar对象?

Foo.objects.order_by('-bars.first__time')

1 个答案:

答案 0 :(得分:1)

考虑到“第一个”是时间最长的“ Bar”对象,我们可以先.annotate(..)Foo对象,然后进行排序在那个最低限度。因此,我们首先使用Min(..)进行注释,然后使用该注释:

from django.db.models import Min

Foo.objects.annotate(
    min_time=Min('bars__time')
).order_by('-min_time')