如何在 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继承自NewItemEditItem(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