2012-12-04 50 views
0

我有几个使用多表继承的模型。像这样。多表继承;对儿童的唯一标题只有

class Group(models.Model): 
    title = models.CharField(unique=True,max_length=255) 


class UserGroup(Group): 
    user = models.ForeignKey(User) 
    def save(self, *args, **kwargs): 
     self.title = self.user.username 
     return super(Group, self).save(*args, **kwargs) 

UserGroups需要具有唯一的标题,Groups也是如此。但是,UserGroup是否与G​​roup具有相同的标题并不重要。事实上,这在某些情况下会发生。我怎样才能做到这一点?

编辑: 如果我使用save方法创建一个名称空间,该怎么办?

class UserGroup(Group): 
    user = models.ForeignKey(User) 
    def save(self, *args, **kwargs): 
     self.title = "user:" + self.user.username 
     return super(UserGroup, self).save(*args, **kwargs) 

class Group(models.Model): 
    title = models.CharField(unique=True,max_length=255) 
    def save(self, *args, **kwargs): 
     self.title = "group:" + self.title 
     return super(Group, self).save(*args, **kwargs) 

这是一个很好的解决方案吗?

回答

1

你需要什么是Group.titleUserGroup.title是在独立的表。你的设计的问题是,在Django多表继承中,子表是从不独立于其父表;您需要使GroupUserGroup从另一个模型(具体或抽象)继承,然后让两个子都声明title字段。

+0

如果我走这条路线,有没有办法强制儿童班有标题栏? –

+0

从声明该字段的抽象模型中派生它们。 –