如何使用多重继承来组合 Django 表单?

How can I use multiple inheritance to compose Django forms?

我有很多包含相同非模型字段的表单。为了这个示例,我们将字段称为 author。这不是任何模型的字段,只是我想在每个表单中出现的字段。这是我当前代码的一个工作示例:

from django import forms
from . import models

class BlogForm(forms.Form):
    author = forms.CharField()
    class Meta:
        model = models.Blog
        fields = ["author"]

class BookForm(forms.Form):
    author = forms.CharField()
    class Meta:
        model = models.Book
        fields = ["author"]

所以,很自然地,我认为我可以使用 Python 继承并创建一个包含此字段的可重用“mixin”class。然而,这似乎是不可能的。出于某种原因,我无法使用以下命令:

from django import forms
from . import models

class AuthorMixin:
    author = forms.CharField()

class BookForm(AuthorMixin, forms.Form):
    class Meta:
        model = models.Book
        fields = ["author"]

这是我遇到的错误:

django.core.exceptions.FieldError: Unknown field(s) (author) specified for Book

如何使用多重继承来组合 Django 表单?

你的 AuthorMixin class 应该覆盖 forms.Forms:

class AuthorMixin(forms.Form):
    author = forms.CharField()

class BookForm(AuthorMixin, forms.Form):
    class Meta:
        model = models.Book
        fields = ["author"]