如何在django中以两种不同的形式使用相同的clean()方法?

时间:2015-08-03 23:08:49

标签: django django-forms

我有两种表单NewItem(ModelForm)EditItem(ModelForm)。我重写了clean() NewItem(ModelForm)方法来验证字段。我想在clean()中重复使用相同的EditItem(ModelForm)方法,如果使用尝试编辑和重新保存数据?没有复制和粘贴,是否有一种干净的方法来实现这一目标?

2 个答案:

答案 0 :(得分:3)

是的,你可以创建一个名为FormCleanMixin() 的mixin类,它将包含两个表单之间通用的clean()方法。然后以2种形式继承这个mixin类。

首先,创建mixin类,如:

from django.forms import ModelForm

class FormCleanMixin(ModelForm):

    def clean(self):
        ...
        # your common code for 'clean()' here

现在,以两种形式继承这个mixin类,如:

class NewItem(FormCleanMixin): # inherit the mixin

    ... # your code

class EditItem(FormCleanMixin): # inherit the mixin

    ... # your code

答案 1 :(得分:1)

您可以使用继承:

  • EditItem继承自NewItemEditItem(NewItem)
  • 或两种形式都继承自仅定义clean()方法的类,例如CleanItemForm(ModelForm),然后定义NewItem(CleanItemForm)EditItem(CleanItemForm)

注意:我是Django的新手,可能还有其他方法我不知道。