Джанго; адаптировать один и тот же валидатор с несколькими полями - PullRequest
0 голосов
/ 12 сентября 2018

Цель:

Я хочу переопределить first_name и last_name из AbstractUser model.

Что я хочу точно:

Я хочу создать validator, который сообщает, заполнен ли first_name или last_name.Поэтому я хочу адаптировать один и тот же валидатор с двумя параметрами.Как я могу создать?

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете переопределить метод модели clean().Для справки, сохранение экземпляра модели через ORM не вызывает метод модели clean().

Поэтому, когда вы создаете подкласс AbstractUser:

from django.core.exceptions import ValidationError


class User(AbstractUser):

    def clean(self):
        super().clean()

        if not self.first_name and not self.last_name:
            raise ValidationError({
                'first_name': ValidationError('Please set this', code='error1'),
                'last_name': ValidationError('... or this', code='error2')
            })

Не забудьтенастройте ваш Django проект, как описано в документах .Вам также необходимо убедиться, что ваши формы, использующие эту модель, всегда реализуют поля first_name и last_name, в противном случае вы получите ValueError.

Так что каждый раз, когда вы используете ModelForm в сочетании сВаша User модель clean() будет вызвана.Например, Django UserChangeForm, UserCreationForm и т. Д.

...