我在 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_node
,其中有一列名为 name
,另一个名为 appname_thingy
,包含两列:name
和 其他东西
。创建新对象时,name
值会复制到两个表中...如果您深入了解规范化的整个概念,那就不太酷了:-)
有人可以向我解释一下如何修改“Thingy”中“name”属性的 max_length 值而不重新定义它吗?
最佳答案
您的实现完全错误,这不是您应该如何编写父类和子类的方式。在父类或子类中定义名称,如果在父类中定义它,则无法在子类中再次定义,因为将创建新字段。因此,如果您想更改子级中的 max_length ,那么我建议您在子级中声明 name ,以便任何从 node 继承的类都将使用自己的 max_length 设置自己的名称。
正确的实现是
class Node(models.Model):
#other class attributes
子类应该继承父类的属性并添加自己的东西。
class Thingy(Node):
name = models.CharField(max_length=100)
otherstuff = models.CharField(max_length=255)
现在,当您查询时,您只能得到一个名称,而不是两个。
关于python - 如何更改 django 子类中的 max_length ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1931404/