2012-12-04 81 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

從聲明該字段的抽象模型中派生它們。 –