Django过滤器对象至少有一个多对多具有值的属性
问题描述:
我正在寻找使用Django的ORM来执行复杂的过滤器。
型号:Django过滤器对象至少有一个多对多具有值的属性
class Book(models.Model):
title = models.TextField()
bestseller = models.BooleanField(default=False)
class Author(models.Model):
name = models.TextField()
books = models.ManytoManyField(Book)
我怎么会查询谁至少有一个畅销书作家的所有?
查询:
best_authors = Author.objects.filter(<relevant filter>)
编辑:
按照documentation,下面应该工作:
best_authors = Author.objects.filter(books__bestseller=True)
不幸的是,这最终会返回重复的作者对象(他/她的每本畅销书的同一作者,一遍又一遍)。
答
best_authors = Author.objects.filter(books__bestseller=True).distinct()
的filter()
确实与Books
表JOIN
并产生所有行bestseller==True
。 distinct()
确保每个作者仅在结果中列出一次。