Как использовать валидаторы в django - PullRequest
1 голос
/ 26 февраля 2020
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
def validate_subject(value):
    if value.isalnum():
        raise ValidationError(_('%(value)s is not valid. Please use alphanumneric characters as subject names'), params={'value': value},)
class Exam(models.Model):  #Exam can have many questions
    subject = models.TextField(primary_key=True, unique = True, validators = [validate_subject])  #make it to reject a string of length 0

    def __str__(self):
        return self.subject

Я хочу, чтобы этот код вызывал ошибку, когда я набрал следующее

from my_app.models import Exam
exam = Exam()
exam.subject = ""
exam.save()

Почему Iam не получает ошибку?

1 Ответ

1 голос
/ 26 февраля 2020

Валидаторы не запускаются при .save() объекте, в основном это делается из соображений производительности. Вы можете вызвать метод .full_clean() [Django -doc] для проверки объекта модели:

from my_app.models import Exam

exam = Exam()
exam.subject = ''
exam<b>.full_clean()</b>
exam.save()

A ModelForm также очистит объект модели, поэтому валидаторы будут работать, если вы создадите или обновите модель через ModelForm.

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