如何在Django中使用iexact检查项是否与大小写不匹配?

时间:2012-04-02 20:30:57

标签: python django

我正在尝试在我的Django应用中使用iexact

我的数据库中包含testTESTtEsTTesT的项目。

我正在尝试找出任何形式的test是否是我的数据库。好像我需要使用iexact,但是我尝试使用它我遇到了错误。

这是我的代码片段。

def item_search(x):
    item = x.column_in_database

    if test__iexact = 'test' in item:
       return 1; #this is just pseduocode for stackoverflow
    elif
       return 0; #this is just pseduocode for stackoverflow

我尝试过各种各样的方法,但我仍然无法让它发挥作用。

2 个答案:

答案 0 :(得分:6)

非常混淆。

__iexact是您在Django查询过滤器中使用的内容。 Django在将查询发送到数据库时将其转换为相关的SQL。它不是Python关键字,您不能只在声明中说test__iexact并期望它能够正常工作。

在普通代码中进行不区分大小写匹配的常用方法就是将双方转换为相同的大小写,即更低:

if 'test' in item.lower():

答案 1 :(得分:2)

您只能使用field lookups作为Django方法调用的关键字参数,您不能在代码中的其他位置使用它们。 Django做了额外的工作,将由__分隔的字符串转换为字段名称和查找类型,而Python不知道如何做到这一点。

您正在寻找的东西可能是:

queryset = MyModel.objects.filter(column_in_database__iexact = 'test')

if queryset: # there is at least one object that matches
    return 1
else: 
    return 0

哪个匹配'TEST'但不匹配'mytest'。如果您还想匹配'mytest',请改用__icontains,这也是不区分大小写的。

如果要匹配已使用get或类似内容从数据库中检索到的对象,则可以使用:

if 'test' == item.text_column_in_database.lower():

或者,如果您想匹配'mytest'

if 'test' in item.text_column_in_database.lower():