考虑这些模型:
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
条件不存在..
答案 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()