Django - ManagementForm数据丢失或被篡改

时间:2016-10-11 21:35:03

标签: python django django-forms

过去几天我一直在为这个问题绞尽脑汁而且我已经阅读了很多关于同样错误的其他问题,但他们似乎都是不同的情况(不包括管理形式,忘记了更新TOTAL_FORMS等等)并没有解决我的问题。我有一个页面,可以在一个HTML表单中包含多个formset。当我将数据发布回服务器时,对于标题中包含错误的表单集的is_valid()检查失败。我是网络开发和Django的新手,所以请原谅我,如果我犯了一个愚蠢的错误,或者采取一种无效的方法。

def purchase(request):
    return generic_form_view(request, "inventory_tracking/add_purchases.html",
                                  "Successfully added purchases for %s.",
                                  PurchaseForm,
                                  [formset_factory(PurchaseForm.LiquorForm),
                                  formset_factory(PurchaseForm.NonLiquorForm)])

def generic_form_view(request, template, success_message, ParentForm, FormSets):
    if request.method == 'POST':
    request_params = copy(request.POST)
    parent_form = ParentForm(request_params)
    formsets = list(map(lambda form_set: form_set(request_params), FormSets))
    if parent_form.is_valid():  # This works.
        for formset in formsets:
            if formset.is_valid():  # Fails here.

以下是我的模板中的代码段:

 <form action="{% block form_action %}{% endblock %}" method="post">
    {% csrf_token %}
    <div class="row">
        <div class="row">
            <div class=" well well-lg">
                <div class="row">
                {{ parent_form.management_form }}
                {% for field in parent_form %}
                    <div class="col-lg-6">
                        <div class="form-group">
                            <label class="control-label">{{ field.label }}</label>
                            {{ field }}
                        </div>
                    </div>
                {% endfor %}
                </div>
            </div>
        </div>
    </div>

    <div class="row">
        {% for formset in formsets %}
            {{ formset.management_form }}
            <div class="row">
                <div class="well well-lg">
                    {% for form in formset %}
                        <div id="{{ form.prefix }}" class="row">
                        ...

我一直试图调试这个,我注意到一些有趣的东西,但由于我对Django不太熟悉,它可能是一个红色的鲱鱼。在POST中,我看到了我正在创建的表单集的management_form数据,但是我没有看到父表单集的management_form数据(在本例中为PurchaseForm)。但是,parent_form正在通过验证而其他表单集则没有。

1 个答案:

答案 0 :(得分:0)

我预计这是一个愚蠢的问题,我转向正确!当我的generic_form_view方法在GET请求上创建表单集时,我添加了一个前缀,就像上面提到的文档一样,但是在POST上创建表单集时我没有添加前缀。