我有一个Django ModelForm,我希望将一个字段视为有条件需要。我希望它在默认情况下是必需的,但根据另一个字段的值不需要。我的模型看起来沿着线的东西:不要求基于另一个字段值的字段
class MyModel(models.Model):
foo = models.BooleanField()
bar = models.CharField(choices=(('A', 'A'),('B', 'B'),('C', 'C')),)
无论有null=True
或blank=True
所以当我使我的形式,这是我想要的是“必需的”同时出现。
但是,我的表单模板上有一些javascript隐藏bar
字段输入,具体取决于foo
的输入值。在这种情况下,提交表单时,我不希望有任何关于bar
的验证错误是必需的。
我想实现我的ModelForm的clean
法这样的逻辑,就像这样:
def clean(self):
data = super(MyModelForm, self).clean()
if data.get('foo') == True and 'bar' in self.errors:
del self.errors['bar']
return data
然而,这似乎仍然给我一个“该字段不能为空。”错误。我注意到我的ModelForm也有一个_errors
字典,但是如果我尝试添加del self._errors['bar']
,我最终会遇到一个异常。
我已经找到了一些方法可以做到的我想的正好相反(1,2),这是没有被默认所需的字段,然后检查它应该在某些情况下需要在clean
,但这不是我想要的是。
我也试过添加data['bar'] = " "
作为解决方法,但后来我得到一个关于不选择其中一个选项的错误。理想情况下,我宁愿只是能够保存空字符串。
if self.errors中的data.get('foo')和'bar': – mtnpaul 2015-02-10 00:20:38
谢谢,这是正确的样式。但是,这并不影响我的问题。 – Joseph 2015-02-10 00:22:45
你正在编辑或创建一个新的对象? – mtnpaul 2015-02-10 00:24:19