python - 如何更改 django 子类中的 max_length ?

标签 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 已创建了两个表。一个名为 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/

相关文章:

python - 如果我在 python 中使用 for 循环,我需要将用于计数的变量设置为 0 还是 for 循环会设置它?

python - 如果输入错误的答案,如何再次询问字符串?

python - django 管理员 : how to make a readonly url field clickable in change_form. html?

python - 如何显示 Wagtail 页面的子级

python - 提高 Python 嵌套 for 循环的性能

python - Celery 配置文件位置

python - 零终止动态数组作为 Python 中的返回值

django - 如何同时使用 Django、sorl-thumbnail、memcached 和 S3?

python - 如何从 Django 中间件获取用户对象?

python - 如何跨 Django View 维护 LDAP 身份验证?