Skip to main content
 首页 » 编程设计

python之Django 过滤器 LIKE 数组 ORM 中的查询(图标)

2024年09月07日27www_RR

Views.py

print(keywords_array)      #['Donut', 'Pizza'] 
print(moods_array)         #['Dating', 'Family'] 
 
items=ItemVariation.objects.filter(item__restaurant__id = i['restaurant']['id'],keyword__name__icontains=keywords_array,keyword__mood__moods__in=moods_array).select_related() 

我需要过滤 keyword__name__icontains 但变量是数组 ['Donut', 'Pizza'] 。

请您参考如下方法:

在这种情况下,最好构造一个正则表达式,并使用 __iregex lookup [Django-doc] :

import re 
 
data = ['Donut', 'Pizza'] 
<b>the_regex</b> = '|'.join(re.escape(datum) for datum in data) 
 
items=ItemVariation.objects.filter( 
    item__restaurant__id = i['restaurant']['id'], 
    keyword__name<b>__iregex=the_regex</b>, 
    keyword__mood__moods__in=moods_array 
).select_related()

另一种方法是创建一个长 OR,每次都对数组中的每个项目使用 keyword__name__icontains。但这可能会更“丑陋”。