Python 如何在Django进行提前搜索?

Python 如何在Django进行提前搜索?,python,django,Python,Django,目前我在Django工作,更确切地说是在filter method工作 据我所知,过滤器是这样工作的。如果我搜索“Apple iphone 7 plus”,它会在我的记录中找到它出现的整个句子,但我想用以下方式修改这个过滤器。我想将查询拆分为单词,然后在文档中查找要搜索的单词,就像上面的查询应该返回那些包含“apple”&“iphone”&“7”&“plus”的记录一样 有人能告诉我如何改进我的查询吗。django中的哪个内置函数可以帮助我 我最近的代码如下所示。 @api_view(['GET

目前我在Django工作,更确切地说是在filter method工作

据我所知,过滤器是这样工作的。如果我搜索“Apple iphone 7 plus”,它会在我的记录中找到它出现的整个句子,但我想用以下方式修改这个过滤器。我想将查询拆分为单词,然后在文档中查找要搜索的单词,就像上面的查询应该返回那些包含“apple”&“iphone”&“7”&“plus”的记录一样

有人能告诉我如何改进我的查询吗。django中的哪个内置函数可以帮助我

我最近的代码如下所示。

@api_view(['GET'])
def Filter_Mobiles(request,query):

   print(query)
   try:
      que = Q(SNR_Title__icontains=query )
   Mobile_all = Mobile_DB.objects.filter(que)

   except Mobile_DB.DoesNotExist:

       return Response(status=status.HTTP_404_NOT_FOUND)
请忽略语法错误

我如何修改这个。是否有任何内置功能可以帮助我?请建议我改变一下。
提前谢谢

您可以创建或查询:

Mobile_DB.objects.filter(Q(SNR_Title__icontains='apple') | Q(SNR_Title__icontains='iphone'))
但它仍然只会创建一个SQL查询,这对于复杂的搜索是不够的。
我建议您查看witch是Django的一个模块,它允许您轻松地将复杂的搜索引擎连接到Django模型。

您可以创建或查询:

Mobile_DB.objects.filter(Q(SNR_Title__icontains='apple') | Q(SNR_Title__icontains='iphone'))
但它仍然只会创建一个SQL查询,这对于复杂的搜索是不够的。 我建议您查看witch是Django的一个模块,它允许您轻松地将复杂的搜索引擎连接到Django模型。

简单的解决方案是:

que = Q()
for word in query.split():
    que &= Q(SNR_Title__icontains=word)
Mobile_all = Mobile_DB.objects.filter(que)
而且您不需要异常Mobile\u DB.DoesNotExist,filter从不引发它。

简单的解决方案是:

que = Q()
for word in query.split():
    que &= Q(SNR_Title__icontains=word)
Mobile_all = Mobile_DB.objects.filter(que)

您不需要异常Mobile\u DB.DoesNotExist,filter永远不会提出它。

让我知道此解决方案是否适用于您,查询每个单词并提供所有数据的并集。对于很多记录来说可能有点慢。我建议使用存储过程进行更复杂的搜索

queryset_final = None

for q in query.split(' '):
    que = Mobile_DB.objects.filter(Q(SNR_Title__icontains=q))
    if queryset_final:
        queryset_final = queryset_final | que
    else:
        queryset_final = que

Mobile_all = queryset_final.distinct()

让我知道这个解决方案是否适合您,查询每个单词并提供所有数据的并集。对于很多记录来说可能有点慢。我建议使用存储过程进行更复杂的搜索

queryset_final = None

for q in query.split(' '):
    que = Mobile_DB.objects.filter(Q(SNR_Title__icontains=q))
    if queryset_final:
        queryset_final = queryset_final | que
    else:
        queryset_final = que

Mobile_all = queryset_final.distinct()

如何自动查询从输入中提取的单词?OP正在寻找
&
)查询。他希望获取包含查询中所有给定单词的记录。您已使用
)查询进行了回答。如何自动查询从输入中挑选的单词?OP正在查找
&
)查询。他希望获取包含查询中所有给定单词的记录。您已回答了
|
)查询。可能重复的Wow可能重复!从来都不知道布尔运算符可以像那样链接在一个循环中。哇!从来没有人知道布尔运算符可以像循环中那样链接。