鉴于以下模型:
class Author(models.Model):
name = models.CharField()
class Book(models.Model):
title = models.CharField()
published_year = models.PositiveIntegerField()
authors = models.ManyToManyField(Author)
假设我希望得到所有撰写过2008年出版的书的作者。我可以做以下事情:
Book.objects.filter(published_year=2008).values_list('authors__name').distinct()
这会给我一个作者列表 - 几乎正是我想要的,除了不仅仅是名字,我想要作者对象。我可以通过这样做来实现这一点:
authors = []
for b in Book.objects.filter(published_year=2008):
for a in b.authors.all():
if a not in authors:
authors.append(a)
但这似乎完全没必要。是否有可能让QuerySet为我做这项工作?谢谢!
答案 0 :(得分:1)
只需使用落后关系
Author.objects.filter(book__published_year=2008).all()
来自Django docs
支持反向m2m查询(即从表格开始 没有ManyToManyField):