Formsets 错误 [u'ManagementForm 数据丢失或已被篡改']

Formsets error [u'ManagementForm data is missing or has been tampered with']

我有这个错误 [u'ManagementForm data is missing or has been tampered with'],即使 management_form 在模板中,我在模板中使用了 2 个表单,我试图在表单集中放置一个前缀,但是它不接受前缀。这是我的代码。我不知道我错过了什么,或者我是否需要制作这两种表格,表格集。 (第一次使用表单集)。

view.py

def DrugsPrescription(request, id):
    data = RecipeDataForm(prefix='data')
    drugs_formset = formset_factory(DrugsForm)
    patient = PatientData.objects.get(pk=id)
    errors = None
    if request.method == 'POST':
        data = RecipeDataForm(request.POST, prefix='data')
        drugs_formset = drugs_formset(request.POST, prefix="med")
        if data.is_valid():
            info = data.save(commit=False)
            info.patient = patient
            if drugs_formset.is_valid():
                info.save()
                for form in drugs_formset.forms:
                    print form
                med = drugs_formset.save(commit=False)
                med.datos_id = info.pk
                med.save()
                success_url = reverse('/')
                return HttpResponseRedirect(success_url)
            else:
                print drugs_formset.errors
        else:
            print data.errors
    return render(
        request, 'prescription.html',
         {'data': data,
         'patient': patient,
         'drugs_formset': drugs_formset,
         'errors': errors})

template.html

<form class="medical" id="drugs" method="POST" enctype="multipart/form-data">
    {% crispy data %}
    <div>{{errors}}</div>
    <div id="data">
    {{ drugs_formset.management_form }}
    <table border="2">
        {% for form in drugs_formset %}
          <tr>
              {{ form }}
          </tr>
        {% endfor %}
    </table>
</div>

当请求不是 POST 时,您也必须实例化您的表单集。

同时避免对表单集 class 和表单集实例使用相同的变量。

您的代码应该是:

def drugs_prescription(request, id):
    DrugsFormSet = formset_factory(DrugsForm)
    patient = PatientData.objects.get(pk=id)
    errors = None
    if request.method == 'POST':
        data = RecipeDataForm(request.POST, prefix='data')
        drugs_formset = DrugsFormSet(request.POST, prefix="med")
        if data.is_valid():
            info = data.save(commit=False)
            info.patient = patient
            if drugs_formset.is_valid():
                info.save()
                for form in drugs_formset.forms:
                    print form
                med = drugs_formset.save(commit=False)
                med.datos_id = info.pk
                med.save()
                success_url = reverse('/')
                return HttpResponseRedirect(success_url)
            else:
                print drugs_formset.errors
        else:
            print data.errors
    else:
        data = RecipeDataForm(prefix='data')
        drugs_formset = DrugsFormSet(prefix='med')
    return render(
        request, 'prescription.html',
         {'data': data,
         'patient': patient,
         'drugs_formset': drugs_formset,
         'errors': errors})

我还将您的函数从 DrugsPrescription 重命名为 drugs_prescription 以匹配 python 样式约定。