Я использую Django 1.6.1 с django-taggit.
Я пытаюсь расширить свою поисковую систему так, чтобы она выполняла поиск по ключевым словам в других полях, помимо полей тегов. Проблема в том, что когда я перебираю теги для поиска значков в имени модели, кажется, что набор запросов перестает быть набором запросов, теряет свой метод подсчета, и отдельный метод не работает.
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» в заголовке или URL-адресе. Я хочу иметь не только результаты, теги которых соответствуют ключевым словам, введенным пользователем, но я хочу выполнить поиск в других полях по введенным ключевым словам, объединить эти наборы запросов и оставить любой результат, добавленный дважды или более.
Итак, как и когда в этом процессе я сортирую по очкам, а затем удаляю дубликаты?