django具体继承,父类中的__str __(self)无法从子节点中选择属性

时间:2016-07-10 08:03:16

标签: python django inheritance django-models django-admin

在Django中,我使用具体的继承如下:

Client类是具体的父级,具有公共字段。客户可以是个人,合伙企业或公司......

注意:是的,我已经了解了具体继承的缺点,但我的数据库很小,我希望能够轻松地从Client表中强制执行唯一性约束。

对象名称属性仅驻留在子表中(因为个人具有FirstName,MiddleName,LastName而公司没有)

我想使用Parent类中的 str (self)方法返回个人,合伙企业或公司的名称(视情况而定)。

在个人模型中,我有名称(自我)方法:

    def name(self):
        if self.Middle_Name is None:
            return self.First_Name + " " + self.Last_Name
        else:
            return self.First_Name + " " + self.Middle_Name + " " + self.Last_Name

在Client()模型中,我有 str (self)方法:

def __str__(self):
    return self.name()

可以理解,我得到了 '客户'当我必须获取所有客户名称列表时,对象没有属性'名称' 错误。

有没有办法让这项工作?对不起,我是面向对象编程概念和Django的新手。

1 个答案:

答案 0 :(得分:1)

这是错误的方式。如果您的方法引用仅存在于子模型上的属性,那么它应该在该子模型上。作为奖励,这使得逻辑变得更加简单:

class Client:
    def name(self):
        return self.First_Name + " " + self.Last_Name

class Individual(Client):
    def name(self):
        return self.First_Name + " " + self.Middle_Name + " " + self.Last_Name