2

调用UserModel.objects.filter(email__iexact=email)结果如下查询

SELECT * FROM "accounts_person" WHERE "accounts_person"."email" = UPPER('my-email@mail.com')

这没有找到任何东西,因为它EMAIL@MAIL.COM在数据库中没有,只有email@mail.com. 查询不应该被翻译成 WHERE UPPER("accounts_person"."email") = UPPER('my-email@mail.com')?

概括:

UserModel.objects.filter(email=email) # works
UserModel.objects.filter(email__exact=email) # works
UserModel.objects.filter(email__iexact=email) # doesn't work
4

2 回答 2

1

与您发生冲突,这我也面临与 postgres sql 相同的情况。

如果你通过这张票

你会有一些想法。

也许可以将一个选项传递给 EmailField 以说明您是否希望它降低所有大小写。它将不必在表单验证中做一些事情。

def clean_email(self):
    return self.cleaned_data['email'].lower()
于 2013-03-07T12:39:44.537 回答
0

我的错。我已经修补lookup_cast以能够在 postgresql 上使用 unaccent 模块,但lookup_cast后来没有调用原始模块。生成的查询现在看起来像这样WHERE UPPER("accounts_person"."email"::text) = UPPER('my-email@mail.com')。这是 django 的默认行为。

于 2013-03-07T13:04:58.093 回答