从子模型覆盖父模型属性

时间:2018-08-09 16:43:10

标签: django django-models

我有以下父母模型

class ModelParent(PolymorphicModel):

    company = models.CharField(max_length=50)
    .......

和模型孩子

class ModelChild(ModelParent)

     company = models.CharField(max_length=10, blank=True)
     ...........

如何使模型子级 company 属性覆盖父 company 模型属性,而不创建抽象父级模型

1 个答案:

答案 0 :(得分:1)

很遗憾,这是not possible,没有抽象的父模型。

  

不允许使用字段名称“隐藏”

     

在正常的Python类继承中,子类可以覆盖父类的任何属性。在Django中,模型字段通常不允许这样做。如果非抽象的模型基类具有一个称为author的字段,则不能在从该基类继承的任何类中创建另一个模型字段或定义一个称为author的属性。

     

此限制不适用于从抽象模型继承的模型字段。此类字段可以被另一个字段或值覆盖,也可以通过设置field_name = None来删除。

建议不要简单地创建一个属性或重命名子模型的字段。您可以做的另一件事是删除父模型的“公司”字段,然后将其移至所有子模型。

class ModelChild(ModelParent)

 child_company = models.CharField(max_length=10, blank=True)
 ...........