2013-03-07 6 views
2

Вызов UserModel.objects.filter(email__iexact=email) результатов в следующем запросеemail__iexact on django не работает на postgresql?

SELECT * FROM "accounts_person" WHERE "accounts_person"."email" = UPPER('[email protected]') 

Это ничего не находит, потому что нет в базе данных нет [email protected], только [email protected]. Не следует ли перевести запрос на WHERE UPPER("accounts_person"."email") = UPPER('[email protected]')?

Резюме:

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

ответ

0

My bad. Я заплатил lookup_cast, чтобы использовать unaccent модуль на postgresql и закончил тем, что не назвал оригинал lookup_cast впоследствии. Сгенерированный запрос теперь выглядит следующим образом: WHERE UPPER("accounts_person"."email"::text) = UPPER('[email protected]'). Это поведение по умолчанию для django.

1

Clash вы ае право это я также столкнулась с той же situtaion с Postgres SQL.

Если вы идете через This ticket

вы получите некоторое представление.

Возможно, на EmailField может быть отправлен вариант, чтобы указать, хотите ли вы, чтобы он опустил все случаи или нет. Это избавило бы от необходимости делать что-то в валидации формы.

def clean_email(self): 
    return self.cleaned_data['email'].lower() 
Смежные вопросы