Django设计模式 - 用于创建和更新模型的表单

时间:2011-01-02 18:38:48

标签: django django-models django-forms

假设我想创建和更新模型。显示哪些字段以及验证类型取决于操作(创建或更新)。但他们仍然分享了许多相同的验证和功能。是否有一种干净的方法让ModelForm处理这个(除了实例存在于任何地方)或者我应该创建两个不同的模型形式?

1 个答案:

答案 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

另一个选项是子类化你的模型 - 在基类中保持联合功能,然后在子类中保持特定的创建或更新功能。