首页 > 解决方案 > django错误管理表单丢失或被篡改

问题描述

我无法解决此错误:

ValidationError:ManagementForm 数据丢失或已被篡改

更新:如果我删除任何表单集(sr_formset、ttt_formset、gc_formset、pc_formset、gpm_formset)的注释,我会收到错误消息。我的观点:

def manage_score(request,pk):
ScoreFormSetSR = formset_factory(ScoreForm,min_num=12,max_num=12)
ScoreFormSetTTT = formset_factory(ScoreForm,min_num=12,max_num=12)
ScoreFormSetGC = formset_factory(ScoreForm,min_num=12,max_num=12)
ScoreFormSetPC = formset_factory(ScoreForm,min_num=6,max_num=6)
ScoreFormSetGPM = formset_factory(ScoreForm,min_num=6,max_num=6)
ScoreFormSetHC = formset_factory(ScoreForm,min_num=8,max_num=8)
ScoreFormSet1C = formset_factory(ScoreForm,min_num=8,max_num=8)
stage = DailyStage.objects.get(pk=pk)



if request.method == 'POST':


    if stage.tipo=='SR':
        formsetHC_list = []
        formset1C_list = []
        for n in range (stage.hc):
            formsetHC_list.append(ScoreFormSetHC)
        for k in range (stage.UNOc):
            formset1C_list.append(ScoreFormSet1C)

        #sr_formset = ScoreFormSetSR(request.POST, request.FILES, prefix='SR')
        #gc_formset = ScoreFormSetGC(request.POST, request.FILES, prefix='GC')
        #pc_formset = ScoreFormSetPC(request.POST, request.FILES, prefix='PC')
        #gpm_formset = ScoreFormSetGPM(request.POST, request.FILES, prefix='GPM')


        return render(request, 'game/score.html', {#'sr_formset': sr_formset,
                                            #'gc_formset': gc_formset,
                                            #'pc_formset': pc_formset,
                                            #'gpm_formset': gpm_formset,
                                            'formset1C_list':formset1C_list,
                                            'formsetHC_list':formsetHC_list,
                                            })

    if stage.tipo=='TTT':
        formsetHC_list = []
        formset1C_list = []
        for n in range (stage.hc):
            formsetHC_list.append(ScoreFormSetHC)
        for k in range (stage.UNOc):
            formset1C_list.append(ScoreFormSet1C)

        #ttt_formset = ScoreFormSetTTT(request.POST, request.FILES, prefix='TTT')
        #gc_formset = ScoreFormSetGC(request.POST, request.FILES, prefix='GC')
        #pc_formset = ScoreFormSetPC(request.POST, request.FILES, prefix='PC')
        #gpm_formset = ScoreFormSetGPM(request.POST, request.FILES, prefix='GPM')
        return render(request, 'game/score.html', {
                                            #'ttt_formset': ttt_formset,
                                            #'gc_formset': gc_formset,
                                            #'pc_formset': pc_formset,
                                            #'gpm_formset': gpm_formset,
                                            'formset1C_list':formset1C_list,
                                            'formsetHC_list':formsetHC_list
                                            })

else:
    print('----------------------------------------------------')

    if stage.tipo=='SR':
        print(stage.tipo)
        formsetHC_list = []
        formset1C_list = []
        for n in range (stage.hc):
            formsetHC_list.append(ScoreFormSetHC)
        for k in range (stage.UNOc):
            formset1C_list.append(ScoreFormSet1C)
        sr_formset = ScoreFormSetSR(request.POST, request.FILES, prefix='SR')
        #gc_formset = ScoreFormSetGC(request.POST)
        #pc_formset = ScoreFormSetPC(request.POST, request.FILES, prefix='PC')
        #gpm_formset = ScoreFormSetGPM(request.POST, request.FILES, prefix='GPM')
        return render(request, 'game/score.html', {
                                            #'sr_formset': sr_formset,
                                            #'gc_formset': gc_formset,
                                            #'pc_formset': pc_formset,
                                            #'gpm_formset': gpm_formset,
                                            'formset1C_list':formset1C_list,
                                            'formsetHC_list':formsetHC_list,
                                            #'sr_formset': sr_formset,
                                            })


    if stage.tipo=='TTT':
        formsetHC_list = []
        formset1C_list = []
        for n in range (stage.hc):
            formsetHC_list.append(ScoreFormSetHC)
        for k in range (stage.UNOc):
            formset1C_list.append(ScoreFormSet1C)
        #ttt_formset = ScoreFormSetTTT(request.POST, request.FILES, prefix='TTT')
        #gc_formset = ScoreFormSetGC(request.POST, request.FILES, prefix='GC')
        #pc_formset = ScoreFormSetPC(request.POST, request.FILES, prefix='PC')
        #gpm_formset = ScoreFormSetGPM(request.POST, request.FILES, prefix='GPM')
        return render(request, 'game/score.html', {#'ttt_formset': ttt_formset,
                                            #'gc_formset': gc_formset,
                                            #'pc_formset': pc_formset,
                                            #'gpm_formset': gpm_formset,
                                            'formset1C_list':formset1C_list,
                                            'formsetHC_list':formsetHC_list,
                                            })

我的模板:

<h1>Score page</h1>
<form method="POST" >
{% csrf_token %}


<div style="border-style: solid;width:50%;float:left;">
    <h3>FORMSET HC LIST</h3>
    {% for hc_formset in formsetHC_list %}
        {{ hc_formset.management_form }}
        <h3>--------------</h3>
        <table>
            {% for form in hc_formset %}
            {{ form }}
            {% endfor %} 
        </table>
    {% endfor %}
</div>
 <div style="border-style: solid;width:50%;float:left;">
    <h3>FORMSET 1C LIST</h3>
    {% for unc_formset in formset1C_list %}
        {{ unc_formset.management_form }}
        <h3>--------------</h3>
        <table>
            {% for form in unc_formset %}
            {{ form }}
            {% endfor %} 
        </table>
    {% endfor %}
</div> 
<div style="border-style: solid;width:50%;float:left;">
    <h3>SR CLASSIFICATION</h3>
    {{ sr_formset.management_form }}
    <table>
        {% for form in sr_formset %}
        {{ form }}
        {% endfor %} 
    </table>
</div>

<div style="border-style: solid;width:50%;float:left;">
        <h3>TTT CLASSIFICATION</h3>
    {{ ttt_formset.management_form }}
    <table>
        {% for form in ttt_formset %}
        {{ form }}
        {% endfor %} 
    </table>
</div>
<div style="border-style: solid;width:50%;float:left;">
        <h3>GENERAL CLASSIFICATION</h3>
    {{ gc_formset.management_form }}
    <table>
        {% for form in gc_formset %}
        {{ form }}
        {% endfor %} 
    </table>
</div>
<div style="border-style: solid;width:50%;float:left;">
        <h3>POINTS CLASSIFICATION</h3>
    {{ pc_formset.management_form }}
    <table>
        {% for form in pc_formset %}
        {{ form }}
        {% endfor %} 
    </table>
</div>
<div style="border-style: solid;width:50%;float:left;">
        <h3>GPM CLASSIFICATION</h3>
    {{ gpm_formset.management_form }}
    <table>
        {% for form in gpm_formset %}
        {{ form }}
        {% endfor %} 
    </table>
</div>

这是traceback screenshot Traceback的截图

标签: djangodjango-formsdjango-templates

解决方案


即使您不打算使用该表单集,您也必须调用{{ <some_formset>.management_form }}您传入模板的每个表单集。否则,这就是为什么它在错误中“丢失”。


推荐阅读