【发布时间】:2013-08-06 22:50:25
【问题描述】:
我的 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 以仅返回唯一的书籍,但我想知道为什么我一开始就会得到重复,并且真的很想了解为什么它会这样工作。由于我只在成功过滤的 QuerySet 上调用 filter(),所以重复的书如何添加到结果中?
【问题讨论】:
-
请不要使用标题来标记问题。
-
这是个人喜好问题,我更喜欢这样格式化我的问题。只要看看右边的相关问题,绝大多数都是以完全相同的方式开始的。
标签: django django-models django-queryset