用Django模型继承问题帮助Python新手

时间:2010-05-26 15:28:34

标签: python django django-models django-inheritance

经过多年的PHP编程后,我正在研究我的第一个真正的Django项目,我遇到了模型问题。首先,我注意到我在模型之间复制和粘贴代码,作为一个勤奋的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”,并且有我想要的名字和日期。但是,我有一个“类别”类,名称必须是唯一的。我假设应该有一个相对简单的方法让我从Common访问name属性并使其唯一。但是,我尝试使用的不同方法都失败了。例如:

class Category(Common):
    def __init__(self, *args, **kwargs):
        self.name.unique=True

导致Django管理页面吐出错误“在渲染时捕获到异常:'类别'对象没有属性'name'

有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

您的Common班级中有一个小错误

class Common(model.Model):
    self.name = models.CharField(max_length=255) 

应该是

class Common(model.Model):
    name = models.CharField(max_length=255)

答案 2 :(得分:1)

请注意,UNIQUE约束实际上与Django无关,因此您可以自由地将其添加到数据库表中。您也可以使用post-syncdb钩子来实现此目的。

答案 3 :(得分:0)

尝试使用Meta.unique_together将其强制转换为自己的唯一索引。如果做不到这一点,最简单的方法就是创建两个独立的抽象类,一个是字段唯一而另一个不是。