Python 如何更改django子类中的最大长度?

Python 如何更改django子类中的最大长度?,python,django,Python,Django,我在django有以下型号: class Node(models.Model): name = models.CharField(max_length=255) 以及上述模型的子类: class Thingy(Node): name = models.CharField(max_length=100) otherstuff = models.CharField(max_length=255) 此设置的问题是,尽管一切正常,但查看数据库会发现syncdb创建

我在django有以下型号:

class Node(models.Model):
    name = models.CharField(max_length=255)
以及上述模型的子类:

class Thingy(Node):
    name       = models.CharField(max_length=100)
    otherstuff = models.CharField(max_length=255)
此设置的问题是,尽管一切正常,但查看数据库会发现syncdb创建了两个表。一个名为
appname\u node
的节点有一列名为
name
,另一个名为
appname\u thingy
的节点有两列:
name
otherstuff
。创建新对象时,
名称
值将复制到两个表中。。。如果你深入了解规范化的整个概念,那就不太酷了:-)


有人能给我解释一下,我如何在不重新定义的情况下修改“Thingy”中“name”属性的max_length值吗?

您的实现完全错误,这不是编写父类和子类的方式。在父类或子类中定义名称,如果在父类中定义名称,则不能在子类中再次定义,因为将创建新字段。因此,如果您想更改子节点中的最大长度,那么我建议您在子节点中声明名称,以便从节点继承的任何类都将使用自己的最大长度设置自己的名称

正确的实现是

class Node(models.Model):
    #other class attributes
子类应该继承父属性并添加自己的内容

class Thingy(Node):
    name       = models.CharField(max_length=100)
    otherstuff = models.CharField(max_length=255)

现在,当您查询时,只会得到一个名称,而不是两个。

穆罕默德是正确的。阅读根据问题的具体情况,您可能需要考虑使用抽象基类,而不是真正的多表继承。抱歉,我保留了一些东西来简化问题。对于初学者来说,父模型不能抽象,因为它中有外键约束。至于在将属性保留在父属性的同时更改子属性的最大长度,你们两个是否告诉我Django不支持从父属性重写属性的属性?“name”值需要保留在父级中。这在所有子模型中都很常见,并且此子模型中必须存在太多其他共享属性。如果我不能更改这个属性,我将不得不基本上复制“node”:(是的,django将每个模型类视为一个数据库表。