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(), описанный выше, уже однажды очистил данные).

Вы можете прочитать шаги по валидации формы в приведенной выше ссылке, которой я поделился.

Вернуться на верх