如何在 Django 中以两种不同的形式使用相同的 clean() 方法?
How to use the same clean() method in two different forms in django?
我有两种形式 NewItem(ModelForm)
和 EditItem(ModelForm)
。我覆盖了 NewItem(ModelForm)
的 clean()
方法来验证字段。我想在 EditItem(ModelForm)
中重新使用相同的 clean()
方法,以防用户尝试编辑并重新保存数据?有没有一种无需复制和粘贴即可实现此目的的干净方法?
您可以为此使用继承:
- 使
EditItem
继承自NewItem
:EditItem(NewItem)
- 或者两种形式都继承自只定义了
clean()
方法的class,例如CleanItemForm(ModelForm)
,然后你定义NewItem(CleanItemForm)
和EditItem(CleanItemForm)
.
注意:我是 Django 的新手,可能还有另一种我不知道的方法。
是的,您可以创建一个名为 FormCleanMixin()
的混入 class,它将包含两种形式之间通用的 clean()
方法。然后在你的2个表单中继承这个mixin class。
首先,创建 mixin class 如下:
from django.forms import ModelForm
class FormCleanMixin(ModelForm):
def clean(self):
...
# your common code for 'clean()' here
现在,以你的两种形式继承这个 mixin class,例如:
class NewItem(FormCleanMixin): # inherit the mixin
... # your code
class EditItem(FormCleanMixin): # inherit the mixin
... # your code
我有两种形式 NewItem(ModelForm)
和 EditItem(ModelForm)
。我覆盖了 NewItem(ModelForm)
的 clean()
方法来验证字段。我想在 EditItem(ModelForm)
中重新使用相同的 clean()
方法,以防用户尝试编辑并重新保存数据?有没有一种无需复制和粘贴即可实现此目的的干净方法?
您可以为此使用继承:
- 使
EditItem
继承自NewItem
:EditItem(NewItem)
- 或者两种形式都继承自只定义了
clean()
方法的class,例如CleanItemForm(ModelForm)
,然后你定义NewItem(CleanItemForm)
和EditItem(CleanItemForm)
.
注意:我是 Django 的新手,可能还有另一种我不知道的方法。
是的,您可以创建一个名为 FormCleanMixin()
的混入 class,它将包含两种形式之间通用的 clean()
方法。然后在你的2个表单中继承这个mixin class。
首先,创建 mixin class 如下:
from django.forms import ModelForm
class FormCleanMixin(ModelForm):
def clean(self):
...
# your common code for 'clean()' here
现在,以你的两种形式继承这个 mixin class,例如:
class NewItem(FormCleanMixin): # inherit the mixin
... # your code
class EditItem(FormCleanMixin): # inherit the mixin
... # your code