在我的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
现在我想再次基于Mymodel添加另一个表单MymodelEditform
,仅使用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()验证,因为我只使用了字段的子集,所以它失败了。
问题非常明显:我怎样才能让它按预期工作?
答案 0 :(得分:0)
我没有这样做,但你可以尝试一下。
如下所示
class MymodelformCleaner(ModelForm):
def clean_firstField(self):
#stuff
def clean_secondField(self):
#stuff again
您的模型表单只会定义字段,而干净的方法来自另一个类
class MymodelAddform(ModelForm, MymodelformCleaner):
class Meta:
model = Mymodel
class MymodelEditform(ModelForm, MymodelformCleaner):
class Meta:
model = Mymodel
fields = ['secondField']
答案 1 :(得分:0)
一个明显的解决方案是在clean_secondField
中定义MymodelEditform
并使MyModelAddForm
继承自MymodelEditForm
,但它可能无法按预期工作。另一种解决方案是使两个表单都从定义clean_secondField的公共基本表单继承。
或者您可以明确地排除表格中的字段(参考https://code.djangoproject.com/ticket/12901)