我有一個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