Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
Django 从子模型覆盖父模型属性_Django_Django Models - Fatal编程技术网

Django 从子模型覆盖父模型属性

Django 从子模型覆盖父模型属性,django,django-models,Django,Django Models,我有下面的模型 class ModelParent(PolymorphicModel): company = models.CharField(max_length=50) ....... 还有模范儿童 class ModelChild(ModelParent) company = models.CharField(max_length=10, blank=True) ........... 如何使模型子级公司属性覆盖父级公司模型属性而不使父级抽象父级

我有下面的模型

class ModelParent(PolymorphicModel):

    company = models.CharField(max_length=50)
    .......
还有模范儿童

class ModelChild(ModelParent)

     company = models.CharField(max_length=10, blank=True)
     ...........
如何使模型子级公司属性覆盖父级公司模型属性而不使父级抽象父级模型

不幸的是,这没有抽象的父级模型

不允许字段名“隐藏” 在普通Python类继承中,允许子类重写父类中的任何属性。在Django中,这通常不允许用于模型字段。如果非抽象模型基类有一个名为author的字段,则不能在从该基类继承的任何类中创建另一个模型字段或定义名为author的属性

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

相反,建议只创建一个属性或重命名子模型的字段。您可以做的另一件事是删除父模型的“company”字段,并将其移动到所有子模型

class ModelChild(ModelParent)

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

您必须这样理解它:Django将这样的模型建模为两个表:一个是
父表
表(与公司一起),一个是
子表
表(那么它也应该有一个`公司?)。因此,在这里为它构造验证器(在Django级别)可能更好。