Wizzy
@Wizzy

Почему unbound формы в django не валидны?

Есть форма, с заданными в initial, начальными значениями:
forms:
class UserEditForm(forms.Form):
    sn = forms.CharField(required=True)
    ml = forms.EmailField(required=True)
    mr = forms.EmailField(required=True)

views:
form = UserEditForm(data=request.POST or None, initial={'sn': user.sn, 'ml': user.ml, 'mr': user.mr})

Если я правильно понял, такая форма называется "unbound form".
Как правильно делать POST запрос к таким формам, если form.is_valid()всегда False?
+
При GET запросе все поля выводятся правильно.
При POST запросе значения полей изменяются на None.

Спасибо
  • Вопрос задан
  • 578 просмотров
Решения вопроса 1
если не передаать в форму data или передавать None
то флаг is_bound будет False:
self.is_bound = data is not None or files is not None


и соответственно форма всегда будет не валидна!
def is_valid(self):
        """
        Returns True if the form has no errors. Otherwise, False. If errors are
        being ignored, returns False.
        """
        return self.is_bound and not self.errors


Если вы передадите в качестве data request.POST или просто пустой словарь, то это уже будет обычная форма, которая будет валидироваться согласно определению формы.

Также замечание по поводу initial есть подозрение, что вы его рассматриваете как значения по умолчанию - если поле не передано в data то будет взято значение из initial, так вот оно так не работает, поля initial используются при генерации html отображения формы, но не при валидации.

З.Ы, примеры кода из django1.9
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы