假设我想创建和更新模型。显示哪些字段以及验证类型取决于操作(创建或更新)。但他们仍然分享了许多相同的验证和功能。是否有一种干净的方法让ModelForm处理这个(除了实例存在于任何地方)或者我应该创建两个不同的模型形式?
答案 0 :(得分:4)
有两种可能性让人想起。您可以在表单的__init__
方法中设置一个属性,可以基于您明确传入的参数,也可以基于self.instance
是否存在且具有非无效的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
另一个选项是子类化你的模型 - 在基类中保持联合功能,然后在子类中保持特定的创建或更新功能。