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()确实与BooksJOIN并产生所有行bestseller==Truedistinct()确保每个作者仅在结果中列出一次。