gpt4 book ai didi

django - 如何合并多个查询集并删除重复项?

转载 作者:行者123 更新时间:2023-12-04 18:42:58 24 4
gpt4 key购买 nike

我正在将Django 1.6.1与django-taggit一起使用。

我正在尝试扩展搜索引擎,以便它在标记字段之外的其他字段中搜索关键字。问题在于,当我遍历标签以在模型名称中搜索icontains搜索时,queryset似乎不再是queryset,失去了其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())

在标题或URL中带有“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 objects documentation

关于django - 如何合并多个查询集并删除重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21013973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com