我正在使用带有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'的记录中似乎很笨拙.我希望不仅有标签与用户输入的关键字匹配的结果,而且我想在其他字段中搜索输入的关键字,组合这些查询集,并保留两次或更多次添加的结果.
那么在这个过程中如何以及何时按分数排序然后删除重复项?
我想你想要这样的东西:
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()
Q对象文档