Django过滤具有至少一个具有value属性的多对多对象

Bra*_*ade 7 python django django-orm

我正在寻找使用Django的ORM进行复杂的过滤.

楷模:

class Book(models.Model):
    title = models.TextField()
    bestseller = models.BooleanField(default=False)

class Author(models.Model):
    name = models.TextField()
    books = models.ManytoManyField(Book)
Run Code Online (Sandbox Code Playgroud)

如何查询至少拥有一本畅销书的所有作者?

查询:

best_authors = Author.objects.filter(<relevant filter>)
Run Code Online (Sandbox Code Playgroud)

编辑:

根据文档,以下应该工作:

best_authors = Author.objects.filter(books__bestseller=True)
Run Code Online (Sandbox Code Playgroud)

不幸的是,最终会返回重复的作者对象(他/她的每本畅销书的同一作者,一遍又一遍).

Kev*_*nry 7

best_authors = Author.objects.filter(books__bestseller=True).distinct()
Run Code Online (Sandbox Code Playgroud)

filter()做了JOINBooks表和产生的所有行bestseller==True.在distinct()确保每个作者在结果中列出一次.