代码之家  ›  专栏  ›  技术社区  ›  Joshmaker

帮助python新手解决django模型继承问题

  •  2
  • Joshmaker  · 技术社区  · 15 年前

    在多年的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中的name属性并使其唯一。但是,我尝试使用的不同方法都失败了。例如:

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

    使django管理页显示错误“在呈现时捕获异常:”category“对象没有属性”name“

    有人能给我指个方向吗?

    4 回复  |  直到 15 年前
        2
  •  1
  •   Mark Lavin    15 年前

    你犯了一个小错误 Common

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

    应该是

    class Common(model.Model):
        name = models.CharField(max_length=255)
    
        3
  •  1
  •   Tomasz Zieliński    15 年前

    请注意,unique约束实际上与django无关,因此可以自由地将其添加到数据库表中。您也可以使用 post-syncdb 钩住。

        4
  •  0
  •   Ignacio Vazquez-Abrams    15 年前

    试用使用 Meta.unique_together 强制它进入自己的唯一索引。否则,创建两个独立的抽象类可能是最简单的,一个类的字段是唯一的,另一个类不是唯一的。