2017-04-24 70 views
1

我想基于它的一个字段名称是否在小写字母值列表中筛选出一个查询集。麻烦的是,有些字段值有大写字母,所以我不能做Django对象管理器'较低'参数

all_listings = all_listings.objects.filter(make__name__in=makes) 

是否有可能的方式说沿着

all_listings = all_listings.objects.filter(make__name__lower__in=makes) 

回答

2

你可以尝试使用一些线路Lower func

from django.db.models.functions import Lower 

all_listings = all_listings.objects.annotate(name_lower=Lower('make__name')).filter(name_lower__in=makes) 
+0

嗨Dima,我希望那会是,但是当我用iexact尝试查询时,我得到错误“django.core.exceptions.FieldError:对于CharField不支持的查找'确切'或加入不允许的字段。 – JBT

+0

对不起,我错误地读取了您的查询。我改变了我的答案。现在试试吧 –

+0

非常好查询迪玛,谢谢。这两种注释方式,以及itzmeontv的正则表达式都可以工作。谢谢你们俩。 – JBT

1

你可以做

all_listings = all_listings.objects.filter(make__name__iregex=r'(' + '|'.join(makes) + ')') 
+0

谢谢itzmeontv,这个查询和Dima的注释都为我工作。如果我可以标记两个答案是正确的,我会的。 – JBT