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

 mobiledu2502928897 发布于 2023-02-04 22:10

我正在使用带有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'的记录中似乎很笨拙.我希望不仅有标签与用户输入的关键字匹配的结果,而且我想在其他字段中搜索输入的关键字,组合这些查询集,并保留两次或更多次添加的结果.

那么在这个过程中如何以及何时按分数排序然后删除重复项?

1 个回答
  • 我想你想要这样的东西:

    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对象文档

    2023-02-04 22:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有