Django Formset.u valid()对额外表单无效吗

Django Formset.u valid()对额外表单无效吗,django,django-forms,formset,Django,Django Forms,Formset,在Django应用程序中,我有一个从简单(非模型)表单创建的表单集,额外的=1(允许javasript稍后添加更多表单) 现在,当我在POST请求的视图中创建并尝试验证它时: my_formset = SomeFormset(request.POST, request.FILES) if(my_formset.is_valid()): # FAIL 如果extra呈现表单提交为空,则它总是无法通过上述检查 如果我在最后一个空的额外表单上检查,我会得到有选择的字段(如上面的pickme

在Django应用程序中,我有一个从简单(非模型)表单创建的表单集,额外的=1(允许javasript稍后添加更多表单)

现在,当我在POST请求的视图中创建并尝试验证它时:

my_formset = SomeFormset(request.POST, request.FILES)

if(my_formset.is_valid()):
    # FAIL
如果extra呈现表单提交为空,则它总是无法通过上述检查

如果我在最后一个空的额外表单上检查,我会得到有选择的字段(如上面的pickme)。
换句话说,当需要一些选择字段时,表单集不够聪明,无法判断是否应该忽略提交的空表单。

这不是表单集的常见行为,和。请注意,这在Django管理员中运行良好(如果使用内联线)

您必须在代码中执行其他操作,在某些地方破坏了这种行为。张贴相关表格的完整代码?

谢谢Carl, 你让我发现了问题的根源

创建具有选择字段的窗体时,必须设置<强>初始< /强>值,否则表单将考虑字段更改。

对于这样一种形式:

class SomeForm(forms.Form):

    A = 0
    B = 1
    C = 2
    D = 3

   choices = ((A, 'Aah'), (B, 'Baa'), (C, 'Caa'), (D, 'Daa'))

    # This is a required choice field
    pickme = forms.ChoiceField(choices=choices)
我们这样做:

pickme = forms.ChoiceField(choices=choices, initial=A)

然后,当一个窗体集检查额外的窗体时,它会看到一个初始值为A,并且它也是一个当前值,并且会考虑它没有变化。

谢谢。我会查看它并返回给你,结果这是由于FieldFrand自Frimes。CuxEddio数据包含我没有“空”条目的所有选择字段。我更新问题以反映这一点。我仍然没有一个好的解决方案。我有一个看起来是相同的bug,但是提供一个初始的并没有真正解决问题。你们确定这就是解决你们问题的方法吗?不,但这就是解决问题的方法。若我不想提供字段的初始值呢?那个么我就帮不了你们了,我的朋友。这是一年前的事了,我有一段时间没有使用表单了。如果你能解决它,请告诉我。
pickme = forms.ChoiceField(choices=choices, initial=A)