python - 什么是执行 AND/OR 搜索 Django-Postgres 应用程序的有效方法?

标签 python database django postgresql

在我的 Django 应用程序中,我有一个 Publication 模型和一个具有多对多关系的 Tag 模型。

假设我有四个标签:男士、女士、时尚、设计。我想找到所有具有与之关联的男性或女性标签以及与之关联的时尚或设计标签的出版物。例如,在搜索字段中,我可能会输入:(men || women) && (fashion || design)。换句话说,结果应该产生从每个“或”对中至少一个标签的出版物。

我已经想出了如何只进行“或”搜索(即找到所有带有男性或女性或时尚或设计标签的出版物)并且我已经想出如何只做一个和搜索(即找到所有出版物有所有的标签,男人和女人以及时尚和设计),但我不知道做和-或组合的最有效方法。

到目前为止,我已经拆分了查询字符串以获得“或”对列表,并开始创建搜索谓词,但后来我想,我将如何处理这些结果?例如……

if 'qTag' in request.GET:
        or_queries = request.GET['qTag'].split('&&')

        for or_query in or_queries:
            or_query_set = or_query.split()
            for sub_query in or_query_set:
                if pub_predicate:
                    pub_predicate = pub_predicate | Q(tags__title__istartswith=sub_query)
                else:
                    pub_predicate = Q(tags__title__istartswith=sub_query)
            pubs_for_set = Publication.objects.filter(pub_predicate).distinct()
            pubs_for_tags.append(pubs_for_set)
            pub_predicate = None
            pubs_for_set = None

执行上述操作后,我得到了一个列表 (pubs_for_tags) 的列表 (pubs_for_set),它给出了每个“或”对的所有结果。但是现在呢?我不知道如何继续进行和搜索。 谁能建议一种方法来做到这一点?

最佳答案

我不确定是否有办法做到这一点。我想说尝试将过滤器与 Q 结合使用,但后来偶然发现了这些:

Combining AND OR in Django Queries

AND OR in Django queries II

关于python - 什么是执行 AND/OR 搜索 Django-Postgres 应用程序的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16965942/

相关文章:

python - 使用 For 循环在 dataFrame 中查找 float

python - Regex Python - 查找每个关键字实例,提取关键字和后续字符

python - 如何使用 Flask/SQLAlchemy 将返回结果的数量限制为仅 1000 个最新条目?

database - Visual Studio 中数据库项目类型的区别

database - Bigquery : array of values in a field

python - Django 自定义项目模板

django - 在 django 中扩展用户管理表单

python - 运行 SQL 查询时出现 PySpark 错误

java - 强制的?在 MySql 中为存储过程使用不同的定界符

python - 如何判断我的 Django 应用程序是否在开发服务器上运行?