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_castpostgresql で unaccent モジュールを使用できるようにパッチを適用した後、元のモジュールを呼び出さなくlookup_castなりました。生成されたクエリは次のようになりますWHERE UPPER("accounts_person"."email"::text) = UPPER('my-email@mail.com')。これは、django のデフォルトの動作です。

于 2013-03-07T13:04:58.093 に答える