Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用多重继承来编写Django表单?_Python_Django_Multiple Inheritance - Fatal编程技术网

Python 如何使用多重继承来编写Django表单?

Python 如何使用多重继承来编写Django表单?,python,django,multiple-inheritance,Python,Django,Multiple Inheritance,我有很多表单包含相同的非模型字段。在本例中,让我们调用字段author。这不是任何模型的字段,只是我希望在每个表单中显示的字段。下面是我当前代码的一个工作示例: from django import forms from . import models class BlogForm(forms.Form): author = forms.CharField() class Meta: model = models.Blog fields = [&

我有很多表单包含相同的非模型字段。在本例中,让我们调用字段
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”类。然而,这似乎是不可能的。由于某些原因,我无法使以下各项正常工作:

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 AuthorMixin(forms.Form):
    author = forms.CharField()

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

虽然这会起作用,但我正在尝试使用多重继承来编写新的表单(因此是新的)。原因是我已经为表单定义了自己的基类,我希望仅对所选表单使用
AuthorMixin
。您没有指定要从自己的基类重写,事实上,您的示例是在重写django表单类的同时使用mixin。我已经更新了答案以反映您的需求。非常感谢。这正是我需要的!