在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的新手。
答案 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