Django "Отсутствуют данные ManagementForm" при рендеринге 2 наборов форм с Foreignkey
Я пытаюсь сделать 2 набора форм в 1 представлении и получаю
u'ManagementForm data is missing or has been tampered with
ошибка. Веб-страница отображается нормально, и данные передают значения в базу данных, когда я нажимаю кнопку Отправить, но я думаю, что неправильно передаю данные формы управления.
Я также хочу добавить, что я использовал " https://docs.djangoproject.com/en/dev/topics/forms/formsets/", но он не предоставил достаточной документации по передаче данных формы управления. Кроме того, у моих опций и форм результатов есть один и тот же ключ. Дайте мне знать, если вы обнаружите какие-либо проблемы с передачей данных формы управления или если что-то не так с кодом.
Ниже приведены мои views.py и html:
views.py
def option(request):
if request.method == "POST":
optionForm = OptionForm(request.POST)
outcomeForm = OutcomeForm(request.POST)
if optionForm.is_valid():
new_option = optionForm.save()
new_outcome = outcomeForm.save()
optionInlineFormSet = OptionFormSet(request.POST, request.FILES, instance=new_option, prefix='option')
outcomeInlineFormSet = OutcomeFormSet(request.POST, request.FILES, instance=new_outcome, prefix='outcome')
if optionInlineFormSet.is_valid() and outcomeInlineFormSet.is_valid:
optionInlineFormSet.save()
outcomeInlineForSet.save()
return HttpResponseRedirect(reverse(outcome))
else:
optionForm = OptionForm()
outcomeForm = OutcomeForm()
optionInlineFormSet = OptionFormSet()
outcomeInlineFormSet = OutcomeFormSet()
return render_to_response("option.html", {'optionForm': optionForm, 'outcomeForm': outcomeForm, 'optionInlineFormSet': optionInlineFormSet, 'outcomeInlineFormSet': outcomeInlineFormSet}, context_instance=RequestContext(request))
HTML:
<form class="option_form" action="{% url option %}" method="post">{% csrf_token %}
{{ optionInlineFormSet.management_form }}
{{ outcomeInlineFormSet.management_form }}
{{ optionForm.as_table }}
{{ outcomeForm.as_table}}
<input type="submit" name="submit" value="Submit" class="button">
</form>
1 ответ
Нашел ответ. Вам необходимо добавить префикс InlineFormsets, чтобы они не конфликтовали друг с другом. Здесь было мое изменение:
else:
optionForm = OptionForm()
outcomeForm = OutcomeForm()
optionInlineFormSet = OptionFormSet(prefix='option')
outcomeInlineFormSet = OutcomeFormSet(prefix='outcome')