我正在使用带有django-taggit的Django 1.6.1。
我正在尝试扩展我的搜索引擎,以便在标记字段之外的其他字段中搜索关键字。麻烦的是,当我在模型的名称中迭代标签进行icontains搜索时,查询集似乎不再是一个查询集,丢失了count方法,而且distinct方法不起作用。
views.py:
def index(request):
numresources = Resource.objects.count()
if request.method == 'POST':
form = SearchForm(request.POST)
if form.is_valid():
query = form.cleaned_data['query']
tags = parse_tags(query.lower())
# resourcelist = []
# for tag in tags:
# resourcelist.extend(Resource.objects.filter(name__icontains=tag).filter(isActive=True).order_by('-score').distinct())
# resourcelist.extend(Resource.objects.filter(tags__name__in=tags).filter(isActive=True).order_by('-score').distinct())
# numresults = len(resourcelist)
resourcelist = Resource.objects.filter(tags__name__in=tags).filter(isActive=True).order_by('-score').distinct()
querymade = True
numresults = resourcelist.count()
else:
resourcelist = Resource.objects.filter(isActive=True).order_by('-created')[:100]
else:
resourcelist = Resource.objects.filter(isActive=True).order_by('-created')[:100]
form = SearchForm()
return render(request, 'index.html', locals())
将'django'关键字添加到标题或网址中包含'django'的记录中似乎很笨拙。我希望不仅包含其标签与用户输入的关键字匹配的结果,而且我想在其他字段中搜索输入的关键字,合并这些查询集,并将任何结果添加两次或更多。
那么在这个过程中如何以及何时按分数排序然后删除重复项?
答案 0 :(得分:6)
我认为你想要这样的东西:
from django.db.models import Q
Resource.objects.filter(Q(name__icontains=tag) | Q(tags__name__in=tags)).filter(isActive=True).order_by('-score').distinct()