Проверка модели.Не хочу повторяться.Джанго - PullRequest
1 голос
/ 25 сентября 2011

У меня есть модель M, у которой есть поле num=models.IntegerField()
У меня есть модель с именем F для модели M.
Я хочу убедиться, что num никогда не бывает отрицательным.

Если я выполняю проверку в классе формы, F, тогда я могу сделать clean_num(): если отрицательно, бросить ValidationError('Num can never be negative').Этот ValidationError будет автоматически отображаться пользователю, перенаправляя его обратно на отправленную форму и отображая сообщение «Num никогда не может быть отрицательным» в верхней части поля num.Это все сделано автоматически django, как только я скину ValidationError из метода clean_fieldname.

Я бы хотел сделать все это, но в классе модели.

F - это ModelForm, созданный из класса модели M.M определяет, что поле num никогда не может быть отрицательным.

Когда я вызываю is_valid() в форме, я хочу, чтобы функции, определенные в модели, проверяли на валидацию для любого ModelFormчто ссылается на эту модель.

Как мне этого добиться?

Ответы [ 3 ]

1 голос
/ 25 сентября 2011

Вы также можете использовать PositiveIntegerField для этой конкретной проблемы.

Если ваша проверка зависит только от значения поля, вы можете реализовать свой собственный тип поля, как описано здесь: https://docs.djangoproject.com/en/dev/howto/custom-model-fields/

1 голос
/ 29 сентября 2011

Спасибо всем, кто разместил ответ.Но я нашел именно то, о чем спрашивал, поэтому, если вам интересно:

Вы можете определить правильные валидаторы только один раз для модели.Все формы, использующие эту модель, будут иметь ValidationError («не могу использовать это имя»), добавляемый в их список field_name.errors.

Обратите внимание, что они будут добавлены в поле в форме, для которой запущен валидатор поля модели.

В любом случае, проверьте это:

Django: как очистить поля формы и избежать дублирования кода

1 голос
/ 25 сентября 2011

См. Проверка модели (только Django 1.2+).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...