Django Валидация одного поля cleaned_data
Я новичок в django и изучаю темы валидации. Теперь у меня есть вопрос о валидации одного поля и словаре clean_data.Я использую django 3.2. В моем model.py есть такая таблица:
class Personen(models.Model):
DEUTSCHLAND = 'DE'
SCHWEIZ = "CH"
ÖSTERREICH = "AT"
ENGLAND = "UK"
NATION_CHOICES = [
(DEUTSCHLAND, "Deutschland"),
(SCHWEIZ, "Schweiz"),
(ÖSTERREICH, "Österreich"),
(ENGLAND, "England"),
]
vorname = models.CharField(max_length=200)
nachname = models.CharField(max_length=200)
username = models.CharField(max_length=200)
stadt = models.CharField(max_length=15, validators=[
validate_nation_regexval], null=True)
nationalität = models.CharField(
max_length=2, choices=NATION_CHOICES, default=DEUTSCHLAND)
biere = models.ManyToManyField("Bier", through="PersonenBier")
def __str__(self):
return self.username
Я импортирую это в forms.py и хочу проверить поле 'username'. Поэтому я создал валидацию одного поля в forms.py
class PersonenForm(ModelForm):
class Meta:
model = Personen
fields = '__all__'
def clean_username(self):
print(self.cleaned_data)
username_passed = self.cleaned_data["username"]
username_req = "user_"
if not username_req in username_passed:
raise ValidationError("Ungültig")
return username_passed
Пока все работает, но меня смущает, как я и ожидал, то, что диктат clean_data включает только поле 'username'. Почему в дикте есть также ключи 'vorname' и 'nachname'?
console output clean_data dict
Спасибо за информацию.
cleaned_data
вызывает метод clean()
, поэтому содержит все подтвержденные поля.
Метод clean_() вызывается на подклассе формы - где заменяется на имя атрибута поля формы. Этот метод выполняет любую очистку, специфичную для данного атрибута, не связанную с типом поля, которым он является. Этому методу не передаются никакие параметры. Вам нужно будет найти значение поля в self.cleaned_data и помнить, что в этот момент оно будет объектом Python, а не исходной строкой, представленной в форме (оно будет в cleaned_data, потому что метод general field clean(), описанный выше, уже однажды очистил данные).
Вы можете прочитать шаги по валидации формы в приведенной выше ссылке, которой я поделился.