У меня есть форма, в которой используется аргумент выбора, из которого я создал набор форм. Когда страница, содержащая набор форм, визуализируется, поля, в которых используется раскрывающийся список вариантов выбора, выбирают виджеты. Формы, заполненные пользователем, не имеют ошибок. Однако формы, которые НЕ заполнены пользователем, имеют ошибки «Это поле обязательно» для всех других полей, кроме полей, которые использовали виджет выбора.Ошибка Django formset: поля выбора вызывают частично заполненные формы
Похоже, что начальные значения поля выбора приводят к тому, что форму обрабатывают как заполненную форму, и, таким образом, процесс проверки формы выдает ошибки для обязательных полей, которые не заполнены.
# Form:
class OwnerForm(forms.Form):
name = forms.CharField(label = 'Name', max_length = 20)
owner_entity = forms.ChoiceField(label = 'Owner Entity', choices = OWNER_ENTITIES)
num_of_shares = forms.DecimalField(label = 'Number of Shares' , min_value = 0.0, max_digits = 5, decimal_places = 2)
share_class = forms.ChoiceField(label = 'Share Class', choices = SHARE_CLASSES)
joined_date = forms.DateField(label = 'Joined Date', help_text = 'mm/dd/yyyy')
# View:
# In Get method:
OwnersFormSet = formset_factory(OwnerForm, extra = 5)
...
# In Post method:
the_owners_forms = OwnerFormSet(request.POST)
if not the_owners_forms.is_valid():
the_owners_forms_errors = the_owners_forms.errors
Итак, вопрос в том, как я могу иметь дело с таким поведением, так что не заполненные формы не будут приняты, чтобы быть как HAL заполненные формы из-за начального значения выбора метода?
Я попытался до публикации вопроса, но это не сработало. Я добавил (Нет, «------------») в OWNER_ENTITIES, но он пропускает это и выбирает следующий элемент в кортеже. Я думаю, это вручную удалить эти начальные значения, когда я получаю формы и запускаю is_valid после ручной модификации. – EarlyCoder
Если вы хотите работать с javascript, у меня есть более элегантное решение для вашей проблемы. – trantu
Ваше решение более чем приветствуется! Я также хотел бы узнать, как справиться с этим, используя Django. – EarlyCoder