2016-05-12 86 views
1

的給定的Django模型訪問Django的模型

class Sub(models.Model): 
    name = models.CharField(max_length=100) 
    size_in_inches = models.IntegerField(default=6) 

class TunaSub(Sub): 
    fish_ingredient = models.CharField(max_length=10, default="Tuna") 

class MeatballSub(Sub): 
    meat_ingredient = models.CharField(max_length=20, default="Meatball with Cheese") 

我想訪問超類的屬性超,說__str__方法(在Python 3.X)。我該怎麼做?這是正確的解決方案嗎?

class TunaSub(Sub): 
    fish_ingredient = models.CharField(max_length=10, default="Tuna") 
    def __str__(self): 
     return self.super().name 

class MeatballSub(Sub): 
    meat_ingredient = models.CharField(max_length=20, default="Meatball with Cheese") 
    def __str__(self): 
     return self.super().name 

回答

2

既然你延長Subname也都TunaSubMeatballSub的領域。所以,你可以簡單地使用

def __str__(self): 
    return self.name 

作爲一個側面說明,因爲要擴展一個具體的模型,你實際上在數據庫中創建三個獨立的表(命名爲subtuna_submeatball_sub),它們通過一個連接一對一的關係。如果您只想重複使用sub中的字段定義,而不是實際爲其創建表,請使用abstract base model class

+0

非常感謝!那麼,事實上,我將再次詢問這個問題。 – bryansis2010

+0

@ bryansis2010重申;目前的方法沒有任何內容,但是您也在物理上分離數據庫表。如果你不打算這種行爲,只想爲你的子類使用兩個表,那麼使用一個抽象的'Sub'模型。您應該閱讀我鏈接的文檔以獲得更詳細的討論。 – Selcuk