我希望使用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)
我如何查询至少拥有一本畅销书的所有作者?
查询:
best_authors = Author.objects.filter(<relevant filter>)
修改
根据documentation,以下内容应该有效:
best_authors = Author.objects.filter(books__bestseller=True)
不幸的是,最终会返回重复的作者对象(他/她的每本畅销书的同一作者,一遍又一遍)。
答案 0 :(得分:7)
best_authors = Author.objects.filter(books__bestseller=True).distinct()
filter()
使用JOIN
表执行Books
并生成bestseller==True
的所有行。 distinct()
确保每位作者仅在结果中列出一次。