我的 Django 应用程序中有以下模型:
class Book(models.Model):
name = models.CharField(max_length=100)
keywords = models.ManyToManyField('Keyword')
class Keyword(models.Model)
name = models.CharField(max_length=100)
我保存了以下关键字:
science-fiction
fiction
history
science
astronomy
在我的网站上,用户可以按关键字过滤书籍,访问/keyword-slug/
. 在我的视图中,keyword_slug 变量被传递给一个函数,该函数按关键字过滤书籍,如下所示:
def get_books_by_keyword(keyword_slug):
books = Book.objects.all()
keywords = keyword_slug.split('-')
for k in keywords:
books = books.filter(keywords__name__icontains=k)
这在大多数情况下都有效,但是每当我使用包含在关键字表中多次出现的字符串(例如science-fiction
和fiction
)的关键字进行过滤时,我就会得到同一本书在生成的 QuerySet 中多次出现。
我知道我可以添加distinct
只返回独特的书籍,但我想知道为什么我一开始就会得到重复,并且真的想了解为什么它会以这种方式工作。由于我只调用filter()
成功过滤的查询集,重复的书如何添加到结果中?