Django QuerySet to return ManyToMany 字段中的唯一对象
Django QuerySet to return unique objects in ManyToMany fields
给定以下模型:
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 为我完成这项工作?谢谢!
就用后向关系
Author.objects.filter(book__published_year=2008).all()
来自 Django docs
Reverse m2m queries are supported (i.e., starting at the table that
doesn’t have a ManyToManyField):
给定以下模型:
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 为我完成这项工作?谢谢!
就用后向关系
Author.objects.filter(book__published_year=2008).all()
来自 Django docs
Reverse m2m queries are supported (i.e., starting at the table that doesn’t have a ManyToManyField):