@orexov666

Как отредактировать валидацию django allauth?

В проекте стоит батарейка django-allauth, добавил в Юзера новое поле phone которое unique=True
Добавил поле в forms.py
from allauth.account.forms import SignupForm
from allauth.account.forms import forms
from .models import CustomUser


class MyCustomSignupForm(SignupForm):
    """Форма регистрации"""
    def __init__(self, *args, **kwargs):
        super(MyCustomSignupForm, self).__init__(*args, **kwargs)
        self.fields['phone'] = forms.CharField(required=True)
        self.fields['image'] = forms.FileField(required=False)



    def save(self, request):
        user = super(MyCustomSignupForm, self).save(request)
        user.phone = self.cleaned_data['phone']
        if self.cleaned_data['image']:
            user.image = self.cleaned_data['image']
        user.save()
        return user

    def clean_phone(self):
        if CustomUser.objects.filter(phone=self.cleaned_data["phone"]).exists():
            self.add_error("phone", forms.ValidationError("ERROR"))
        return self.cleaned_data["phone"]

вывел поле в шаблон, при регистрации даже если такого номера нет, выдает Traceback UNIQUE constraint failed: users_customuser.phone

Хочу что бы он добавлял ошибку в forms.error и выводил на страницу
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 1
tumbler
@tumbler Куратор тега Django
бекенд-разработчик на python
В вашем кастомном пользователе нужно объявить поле phone модели как уникальное. Форма на основе ModelForm сможет проверить уникальность введенного значения, для "ручных" форм, боюсь, это надо писать вручную
def validate_phone(value):
    try:
        CustomUser.objects.get(phone=value)
        raise ValidationError("занят")
    except CustomUser.DoesNotExist:
        return value
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
21 сент. 2020, в 13:21
50000 руб./за проект
21 сент. 2020, в 13:20
120000 руб./за проект
21 сент. 2020, в 13:08
5000 руб./за проект