Django的查询集(QuerySet)中的__contains方法是否区分大小写?

19

我想执行一个简单的查询:

Pizza.object.filter(topping__contains='PEPERONI')

像这样,它可以完美运行。但是如果我尝试这样做:

Pizza.object.filter(topping__contains='peperoni')

它不起作用。

你知道为什么它区分大小写吗?有没有办法从Django取消这个功能?

2个回答

52

使用 Pizza.object.filter(topping__icontains='peperoni') 进行过滤。

使用 __icontains 检查进行过滤。


2
您需要导入并使用Q对象:
from django.db.models import Q 

Resulting_Queryset = MyModel.objects.filter(Q(name__istartswith='Nishank Gupta'.strip().lower()) &  Q(name__iendswith='Nishank Gupta'.strip().lower()))

这将匹配 Nishank GuptaNishank GUPTANisHANnk Gupta 等内容。希望能对您有所帮助。请让我知道您的看法。
或者使用 iexact:
MyModel.objects.filter(name__iexact='Nishank Gupta'.strip().lower()) 

请注意,当您使用 istartswithiexact 等函数时,不需要使用 lower() - Domenico Spidy Tamburro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接