0

1 つのビューで 2 つのフォームセットをレンダリングしようとしていますが、

u'ManagementForm data is missing or has been tampered with

エラー。Web ページは正常にレンダリングされ、送信を押したときにデータが値をデータベースに渡しますが、管理フォームのデータを間違って渡していると思います。

また、「 https://docs.djangoproject.com/en/dev/topics/forms/formsets/ 」を使用したことも付け加えておきますが、管理フォーム データの受け渡しに関する十分なドキュメントが提供されていませんでした。また、私のオプションと結果のフォームセットは同じ外部キーを持っています。管理フォームのデータを渡す際に問題が発生した場合、またはコードに何か問題がある場合はお知らせください。

以下は私のviews.pyとhtmlです:

ビュー.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>
4

1 に答える 1

0

答えを見つけました。互いに競合しないように、InlineFormsets にプレフィックスを付ける必要があります。ここに私の変更がありました:

else:
   optionForm = OptionForm()
   outcomeForm = OutcomeForm()
   optionInlineFormSet = OptionFormSet(prefix='option')
   outcomeInlineFormSet = OutcomeFormSet(prefix='outcome')
于 2013-08-03T17:01:18.320 に答える