kil*_*ney 5 django django-models django-forms
假设我想创建和更新模型.显示哪些字段以及验证类型取决于操作(创建或更新).但他们仍然分享了许多相同的验证和功能.是否有一种干净的方法让ModelForm处理这个(除了实例存在于任何地方)或者我应该创建两个不同的模型形式?
我想到了两种可能性。您可以在表单的__init__方法中设置一个属性,可以基于您显式传入的参数,也可以基于是否self.instance存在且具有非 None pk:
class MyModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
# either:
self.edit = kwargs.pop('edit', False)
# or:
self.edit = hasattr(self, instance) and self.instance.pk is not None
super(MyModelForm, self).__init__(*args, **kwargs)
# now modify self.fields dependent on the value of self.edit
Run Code Online (Sandbox Code Playgroud)
另一种选择是对模型形式进行子类化 - 将联合功能保留在基类中,然后将特定的创建或更新功能保留在子类中。