Формы полей с уважением DRY django - PullRequest
2 голосов
/ 27 апреля 2020

Учитывая некоторые формы в Django (для простоты рассмотрим следующее)

class LoginRegisterForm(forms.Form):

  email = forms.EmailField(label="Email", max_length=100)
  password = forms.CharField(label="Password", widget=forms.PasswordInput(), max_length=100)

Мы пытаемся ограничить отправку этих форм, если есть дополнительные поля, отправленные, поэтому у нас есть следующий добавленный метод в наш класс формы

    def correct_fields(self):
      return set(self.data.keys()) == {"Email", "Password"}

И следующий код в методе views.py, соответствующий отправке этой формы:

if form.is_valid() and form.correct_fields:

Как мы можем избежать написания Email и Password как в определении формы, так и в методе correct_fields? Предлагает ли django встроенную функцию для предотвращения отправки форм, если правильные поля не отправлены? (Форма все еще отправляется, если указаны правильные поля и некоторые дополнительные поля). Если эта функциональность не предоставлена, как мне избежать записи полей дважды?

1 Ответ

1 голос
/ 27 апреля 2020

Поля, в которых вы не указываете required=False, являются обязательными . В документации по параметру required=… [Django -doc] указано:

По умолчанию каждый Field класс предполагается, что значение является обязательным , поэтому, если вы передаете пустое значение - либо None, либо пустую строку ("") - тогда clean() будет повышать ValidationError исключение.

Таким образом, уже будет подтверждено, что data действительно содержит email и password. Вы можете определить дополнительные поля с помощью:

class LoginRegisterForm(forms.Form):
    email = forms.EmailField(label="Email", max_length=100)
    password = forms.CharField(label="Password", widget=forms.PasswordInput(), max_length=100)
    info = forms.CharField(label="Tell us someting"<b>, required=False</b>, intial='')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...