帮助Python新手解决Django模型继承问题
我正在做我的第一个真正的Django项目,以前一直在做PHP编程,现在遇到了模型方面的问题。首先,我发现我在模型之间复制粘贴代码,作为一个认真负责的面向对象编程(OO)程序员,我决定创建一个父类,让其他模型可以继承这个父类:
class Common(model.Model):
name = models.CharField(max_length=255)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.name
class Meta:
abstract=True
到目前为止一切都很好。现在我所有的其他模型都扩展了“Common”,并且有我想要的名称和日期。然而,我有一个“Categories”的类,其中名称必须是唯一的。我想应该有一种相对简单的方法来访问Common中的名称属性,并使其唯一。但是,我尝试的不同方法都失败了。例如:
class Category(Common):
def __init__(self, *args, **kwargs):
self.name.unique=True
这导致Django的管理页面出现错误:“在渲染时捕获异常:'Category'对象没有属性'name'。”
有人能给我指个方向吗?
4 个回答
1
你的 Common
类里有一个小错误
class Common(model.Model):
self.name = models.CharField(max_length=255)
应该是
class Common(model.Model):
name = models.CharField(max_length=255)
1
请注意,UNIQUE约束实际上和Django没有关系,所以你可以自由地在你的数据库表中添加它。你也可以使用post-syncdb这个钩子来实现这个目的。
2
不,Django不允许这样做。
你可以查看文档了解更多信息:http://docs.djangoproject.com/en/1.1/topics/db/models/#field-name-hiding-is-not-permitted
这个问题在其他地方也有回答,比如:在Django中 - 模型继承 - 是否允许你覆盖父模型的属性?