在我的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()验证被调用,因为我只使用字段的一个子集,所以它失败了
问题很明显:我怎样才能让它按预期工作
我没做过,但你可以试试
如下所示
您的模型表单将只定义字段,而干净的方法来自另一个类
一个显而易见的解决方案是在
MymodelEditform
中定义clean_secondField
,并使MyModelAddForm
从MymodelEditForm
继承,但它可能无法按预期工作。另一种解决方案是使这两个窗体都继承定义clean\u secondField的公共基窗体或者您可以直接排除表单元中的字段(cfhttps://code.djangoproject.com/ticket/12901)
相关问题 更多 >
编程相关推荐