2016-05-12 77 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