Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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_Inheritance - Fatal编程技术网

Python Django模型继承自不同的模型,每个模型都继承自单个类

Python Django模型继承自不同的模型,每个模型都继承自单个类,python,django,inheritance,Python,Django,Inheritance,我正在用Django创建一个表单。此表单的ModelForm基于从基础模型继承的多个模型构建。模型的结构与此类似: class BaseModel(models.Model): first_name = models.CharField("First name", max_length=20) middle_name = models.CharField("Middle name", max_length=20) last_name = models.CharField(

我正在用Django创建一个表单。此表单的ModelForm基于从基础模型继承的多个模型构建。模型的结构与此类似:

class BaseModel(models.Model):
    first_name = models.CharField("First name", max_length=20)
    middle_name = models.CharField("Middle name", max_length=20)
    last_name = models.CharField("Last Name", max_length=20)
    email = models.EmailField("Email address")
    phone = models.CharField("Phone number", max_length=16)
继承人

class EmployerModel(BaseModel):
    company = models.CharField("Company", max_length=20)

它包含在我的最高级别模型(在我的模型表单中使用的模型)中:


我可以在制作表单时采用这种方法并避免ORM错误,因为我有重复的字段名吗?有没有办法分开说;“这些字段用于‘雇主’;这些字段用于‘顾问’?”

编辑


看起来我需要使用抽象基类,但我不知道这是否解决了多重继承问题。

使用父模型进行抽象,我已经成功编写了具有这种定义的模型:

class Content(ModeratedModel, NullableGenericModel, RatedModel, PicturableModel, PrivacyModel, CommentableModel):
    pass
ModelForm
s使用
Content
作为模型可以很好地工作

class FormModel(EmployerModel, AdvisorModel):
    another_field = models.CharField(max_length=20)
    and_another_field = models.CharField(max_length=20)

#...

class FormModelForm(forms.ModelForm):

    class Meta:
        model = FormModel
class Content(ModeratedModel, NullableGenericModel, RatedModel, PicturableModel, PrivacyModel, CommentableModel):
    pass