Skip to main content
 首页 » 编程设计

python之基于 POST 数据向 Django 表单集添加新表单

2024年09月03日35kerrycode

我正在尝试使用来自 POST 请求的数据填充 Django 表单集。我能够正确显示表单集并再次实例化它,但我遇到了一个问题,即表单集最后以 2 个空白行结束,这是不希望的。下面是我们在 views.py 中使用的函数:

表格.py

class DepositForm(forms.Form): 
    InsID = forms.IntegerField() 
    DepositTypeID = forms.IntegerField() 
    DepositAmount = forms.IntegerField() 
    Account = forms.IntegerField() 
 
DepositFormSet = formset_factory(DepositForm, extra=1) 

View .py

def _DepositEditor(request, c): 
    if request.POST.has_key('form-0-InsID'): 
        formset = DepositFormSet(request.POST) 
        if formset.is_valid():  
            formset = DepositFormSet(initial=formset.cleaned_data) 
    else: 
        formset = DepositFormSet() 
    c['formset'] = formset 
     
    return render_to_response('deposits/dep.html', c) 

部门.html

<form action="" method="post">   
 
{{formset.management_form}} 
{% for form in formset.forms %} 
    {{form.errors }} 
    {% for field in form %} 
        {{field.label}}: {{field}} 
    {% endfor %} 
  <br /> 
{% endfor %} 
 
<input type="submit" name="add" value="Add Deposit"></input> 
 
</form> 

这应该是所有相关代码。不管怎样,模板显示了整个表单集,其中应该包含一个空白行(或者,在出现错误的情况下,没有空白行,但在最后一行上方有错误消息)。当您单击最后一行空白的“添加”时,就会出现问题。在代码中,这仍然传递 formset.is_valid(),因此它会创建带有额外字段的新表单集。如果您单击此处添加,它会返回错误,但仍然允许您填写除最后一行以外的所有内容并制作有效的表单集。有没有办法告诉我的表单集空白表单应该无法通过验证?或者有更好的方法来做到这一点?该页面最终计划集成一些 jquery 内容,因此虽然这并不理想,但如果有使用 jquery 工具解决此问题的好方法可能就足够了。非常感谢!

请您参考如下方法:

在你的 views.py 中:

-            formset = DepositFormSet(initial=formset.cleaned_data) 
+            data = formset.cleaned_data 
+            if data[-1]=={}: 
+                data=data[:-1] 
+            formset = DepositFormSet(initial=data) 

它看起来更像是一个功能而不是一个错误 ;)