django条件最大值为每个外键

时间:2016-09-01 20:14:11

标签: django foreach aggregate django-queryset

考虑这些模型:

class Author(models.Model):
   name = models.CharField(max_length=200)

class Book(models.Model):
    author = models.ForigenKey(Author)
    name = models.CharField(max_length=200)
    created_at = models.DateTimeField(auto_now_add=True)
    active = models.BooleanField(default=True)

我想查询所有作者,并在同一行中查询最新的(例如Max('created_at'))书籍,但仅限于书籍active=True。<登记/> 我需要整个相关的图书对象 - 而不仅仅是最大日期 如果没有这样的书 - 所有都是活动的=假,或者它们根本不存在 - 查询应该在需要的地方输出NULL而不是书。

我试着写这样的东西:

Author.objects.annotate(max_book_date=Max('book'))

哪个确实有用,但它缺少书上的其他字段,我不确定它是如何工作的(如果没有书籍),active=True条件不存在..

1 个答案:

答案 0 :(得分:-1)

首先,您应该在Book模型的作者fk字段中定义related_name参数:

author = models.ForeignKey(Author, related_name='libro')

然后,您应该可以执行以下操作:

Author.objects.filter(libro__active=True).annotate(max_book_date=Max('libro__created_at')).all()