我有一个没有按预期工作的 ModelForm。即使对于空字段,该方法is_valid()
也返回 True ,而且在clenead_data
我没有预期的字段,但只有一个不应该存在的字段(因为表单不呈现)。我的场景是这样的:
我的表单类:
class MyForm(ModelForm):
class Meta:
model = MyModel
# fields = ('one', 'two', 'three')
widgets = {
'fieldA': SelectDateWidget(),
'fieldB': forms.HiddenInput(),
# ...
}
fieldX = forms.ChoiceField(widget=forms.RadioSelect(),
choices=(...),
initial=A_VALUE)
fieldY = forms.ChoiceField(widget=forms.RadioSelect(),
choices=(...),
initial=A_VALUE)
表单按预期呈现在页面中并使用 POST 提交(所有数据都正确提交)。然后在我的控制器中,我有类似的东西:
self.form = MyForm(request.POST)
并且self.form.cleaned_data
在调用之前和之后只有一个字段(它是属于模型但在表单中意外的字段)is_valid()
。我还尝试声明在 Meta 类中提供元组的特定“字段”,反之亦然,使用“排除”指定不希望的字段,但没有运气。
我知道,这很模糊......但你能给我一些建议吗?
附言。与 ModelForm 相同的方法在我项目的其他部分中完美地工作:P
...此外,如果我打开交互式 shell ( python manage.py shell
) 并尝试以下操作:
f = MyForm({})
f.is_valid()
我得到以下异常:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/davidezanotti/MyPythonEnv/lib/python2.7/site-packages/django/forms/forms.py", line 126, in is_valid
return self.is_bound and not bool(self.errors)
File "/Users/davidezanotti/MyPythonEnv/lib/python2.7/site-packages/django/forms/forms.py", line 117, in _get_errors
self.full_clean()
File "/Users/davidezanotti/MyPythonEnv/lib/python2.7/site-packages/django/forms/forms.py", line 272, in full_clean
self._clean_fields()
File "/Users/davidezanotti/MyPythonEnv/lib/python2.7/site-packages/django/forms/forms.py", line 290, in _clean_fields
value = getattr(self, 'clean_%s' % name)()
TypeError: 'NoneType' object is not callable