Как указано в комментарии, я считаю, что вы должны обрабатывать эту проверку на уровне модели.Если вы все еще чувствуете, что было бы лучше сделать это ближе к модели, и, поскольку они не могут быть изменены, я бы посоветовал изменить непосредственно на уровне БД:
ALTER TABLE auth_user ADD UNIQUE (email)
Что плохоспособ добавить ограничение unique=True
в модель User
без проверки подлинности.
В соответствии с запросом, я думаю, что хороший способ настройки различных форм должен быть сделан путем наследования от базовой модели.Хороший пример этого можно найти в django-registration .Единственное отличие состоит в том, что вместо родительской формы, унаследованной от forms.Form
, вы бы сделали ее formForm:
class MyBaseModelForm(ModelForm):
class Meta:
model = MyModel
Затем вы можете наследовать ее и создавать различные формы из этой базовой модели:
class OtherFormWithCustomClean(MyBaseModelForm):
def clean_email(self):
email = self.cleaned_data['email']
if ExtendedUser.objects.filter(email=email).exists():
raise ValidationError('This email address already exists.')
return email