考虑这些模型:
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)
我想查询所有的作者,与最新的(e。g Max('created_at')
)的书在同一行,但只有当书是active=True
。
我需要整个相关的图书对象-不仅仅是最大日期。
如果没有这样的书——都是active=False,或者它们根本不存在——查询应该在需要的地方输出NULL
而不是a book。
我试着这样写:
Author.objects.annotate(max_book_date=Max('book'))
确实有效,但它在书中缺少额外的字段,我不确定它在null(即没有书)的情况下是如何工作的,并且active=True
条件不存在。
首先,您应该在Book模型的author 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()