0

多くのフォームが含まれるテンプレートがあり、すべてが 1 つのフォーム要素にラップされています。4 つの通常のフォームと 2 つのフォームセットで構成される MultiForm を使用しています。フォームセットは、カスタム フォームセット クラスを使用するようにオーバーライドされています。テンプレートで管理フォームをレンダリングし、投稿で関連情報を確認できます。

フォームセットについては、フォームを 1 つだけ表示してページを初期化します。

結合されたフォームを送信しようとすると、次のエラーが発生します。

ManagementForm data is missing or has been tampered with

私は答えをどこでも検索し、同じエラーでスタックオーバーフローに関する約15の投稿を読みましたが、解決策はどれも役に立たないようです.

エラー ページでは、次の行が強調表示されます。

{{ beneficiaries.management_form }}

テンプレート:

<form class='pension_form' id='implementation_form' action="{% url "confirmation_form" %}" method="post">
 {% csrf_token %}

<ul>
{{ the_form.user_info.as_ul }}  
 </ul>
<ul>
{{ the_form.spouse_info.as_ul }}  
</ul>

 <div class='formset_container'> {{ children.management_form }}
 {% for form in children %}
    <div class='formset'><ul>{{ form.as_ul }}  </ul><a class="glyphicon glyphicon-plus"></a></div>
{% endfor %}
</div>
  <ul>
{{ the_form.employer_info.as_ul }}  
</ul>
  <ul>
<li>{{ the_form.beneficiary_general.WHO_BENEFITS }}</li>
</ul>
<div id='beneficiary_info_container' style='display:none;'>
<div class='formset_container'>
 {{ beneficiaries.management_form }}
{% for form in beneficiaries %}
<div class='formset' >
<ul>{{ form.as_ul }}</ul><a class="glyphicon glyphicon-plus"></a></div>
    {% endfor %}
</div>
<ul><li id='inheritance_order'>
{{ the_form.beneficiary_general.BENEFICIARIES_DIE.label_tag }}
{{ the_form.beneficiary_general.BENEFICIARIES_DIE }}
</li>
</ul>
</div>

<button class='btn btn-default main-btn'>{% trans "_Continue" %}
</form>

意見:

def show_confirmation_form(request):
ChildFormSet = formset_factory(ChildInfo, formset=ChildInfoFormSet, 
        extra=14, can_delete=True)
BeneficiaryFormSet = formset_factory(BeneficiaryInfo, formset=BeneficiaryInfoFormSet, 
        extra=10, can_delete=True)
multi_form_prefix = 'main_form'
child_prefix = 'children_info'
beneficiary_prefix = 'beneficiary_info'
if request.method == 'POST':
    form = ConfirmationForm(request.POST, prefix=multi_form_prefix)
    children_forms = ChildFormSet(request.POST, prefix=child_prefix)
    beneficary_forms = BeneficiaryFormSet(request.POST, 
        prefix=beneficiary_prefix)
    if form.is_valid():
            #not ready yet
            return HttpResponseRedirect('/thanks/')
else:
    form = ConfirmationForm(prefix=multi_form_prefix)
    children_forms = ChildFormSet(prefix=child_prefix)
    beneficary_forms = BeneficiaryFormSet(prefix=beneficiary_prefix)
context = {'the_form' : form, 'children' : children_forms, 
    'beneficiaries' : beneficary_forms}
return render(request, "confirmation_form.html", context)

Forms.py

class BeneficiaryInfo(forms.Form):
SHEM_PRATI_MUTAV = forms.CharField(label=_("First_Name"))
SHEM_MISHPACHA_MUTAV = forms.CharField(label=_("Last_Name"))
MISPAR_ZEHUT_MUTAV = forms.IntegerField(label=_("Mispar_Zehut"))
ACHUZ_HALUKA = forms.IntegerField(label=_("Percent_Allocate"))

class BeneficiaryInfoFormSet(BaseFormSet):
def clean(self):
    """
    Adds validation to check that no two links have the same anchor or URL
    and that all links have both an anchor and URL.
    """
    if any(self.errors):
        return

    teudot_zehut = []
    distribution_total = 0

    for form in self.forms:
        if form.cleaned_data:
            teudat_zehut = form.cleaned_data['MISPAR_ZEHUT_MUTAV']
            #allow empty forms.
            if teudat_zehut:
                if teudat_zehut in teudot_zehut:
                    form.add_error(None, 'No mutavim can share teudot_zehut')
            distribution_total += int(form.cleaned_data['ACHUZ_HALUKA'])
    if distribution_total != 100:
        form.add_error(None, 'Distribution Total must be 100')
4

1 に答える 1