當在我的Django應用程序如何調用只有驗證方法的子集,我使用的模型(我們稱之爲基於myModel),以及一種形式:編輯工作
class Mymodel(models.Model):
firstField(...)
secondField(...)
class MymodelAddform(ModelForm):
def clean_firstField(self):
#stuff
def clean_secondField(self):
#stuff again
def clean(self):
#performs stuff with all the fields
class Meta:
model = Mymodel
現在我想添加另一種形式, MymodelEditform
的基礎上,爲MyModel再次,只用secondField
,只有secondField
驗證
兩個選項,我認爲(我寫他們兩個不工作):
class MymodelEditform(ModelForm):
class Meta:
model = Mymodel
fields = ['secondField']
這裏的問題是,clean_secondField
不叫,除非我重新定義它,我想,以避免clean_secondField
電話上定義的另一個方法(不過,如果它是唯一的選擇,就這樣吧)
class MymodelEditform(MymodelAddform):
class Meta:
model = Mymodel
fields = ['secondField']
這裏的問題是調用clean()驗證,並且由於我只使用了字段的一個子集,所以失敗了。
這個問題很明顯:我如何讓它按預期工作?
好吧,我沒有看到第二個選項我展示的區別是:所有的驗證方法總會被調用,而不僅僅是與'secondField'有關的一些# –
不,我不這麼認爲。按照你的方式,你從'MymodelAddform'派生出來,它具有所有的字段,並且可能對這些字段調用乾淨。你可能想要檢查'Meta'類如何與繼承一起工作。在我的情況下,第二種形式只有一個字段,所以應該只調用其乾淨的方法。 – Rohan
明確指定要包含的字段已經做了你所建議的(它只調用與你包含的字段相關的驗證方法)。但是我沒有對我遇到的問題進行足夠的測試,使我感到困惑。我編輯了我的問題(實際上,還有另一個clean()方法) –