在 Django 中,正确地制作具有多个类别、多个标签和搜索的查询集?
Posted
技术标签:
【中文标题】在 Django 中,正确地制作具有多个类别、多个标签和搜索的查询集?【英文标题】:In Django, correctly making a queryset with multiple categories, multiple tags and search? 【发布时间】:2011-03-24 18:06:15 【问题描述】:我有一个数据列表。此数据模型具有类别模型和关键字模型的多对多字段。数据模型本身具有名称和描述。数据可以有多个类别和关键字。
在前端,用户可以选择多个类别来过滤数据或进行搜索...所以显示的数据应该是选择了任何类别的任何数据。如果“测试数据 1”的类别为“A”,“测试数据 2”的类别为“B”,如果用户选择查看类别“A”和“B”,则这两条数据都会显示。搜索是在标题、描述和与数据关联的关键字内搜索数据,如果选择了任何类别,它将在查询完类别后剩下的数据中进行搜索。
我不是这里的 Django 专家...我正在尝试找出最好的方法来做到这一点。我不想诉诸于使用诸如 Haystack 之类的东西,因为我的数据真的很简单。我发现对对象执行 .filter() 基本上是在底层 SQL 中给了我一个 AND,这对于类别的工作方式并不理想。看来我需要某种 OR... 也许?
前端的类别选择是通过一个表格完成的,所以返回的数据基本上是所选类别的列表['A','B','C']......没有办法我可以将其放入 Django 中的查询集中并返回具有这些类别中的一个或任何类别的所有数据?
非常感谢!
【问题讨论】:
【参考方案1】:不知道你在这里的意思。您可以尝试以下方式:
from django.db.models import Q
query = 'fun'
books = Fun.objects.filter(Q(categories__id__in=[1,2,3]),
Q(name__icontains=query) | \
Q(description__icontains=query) | \
Q(keywords__title__icontains=query))
http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects
【讨论】:
读完这篇文章,然后在此基础上进行更多研究,这对我很有帮助。谢谢你。我只需要看一个像这样的工作示例就可以理解它。谢谢!以上是关于在 Django 中,正确地制作具有多个类别、多个标签和搜索的查询集?的主要内容,如果未能解决你的问题,请参考以下文章