我在Employee和Manager类之间有继承。员工 - 超类,经理 - 子类。
class Employee(models.Model):
###
name = models.CharField(max_length=50, null=False)
address = models.CharField(max_length=50, null=False)
###
class Manager(Employee):
department = models.CharField(max_length=50)
###
here I don't want the 'name' and 'address' fields of Employee class.
(I want other fields of Employee and department field of this class to be stored in
Manager table in database)
###
怎么能实现这一目标。提前谢谢。
答案 0 :(得分:6)
我使用3个课程:
class BaseEmployee(models.Model):
# All your common fields
class Employee(BaseEmployee):
name = models.CharField(max_length=50, null=False)
address = models.CharField(max_length=50, null=False)
class Manager(BaseEmployee):
department = models.CharField(max_length=50)
我认为这可以达到你想要的效果。
答案 1 :(得分:4)
您可以使用2个下划线(__
)在python类中创建私有变量,查看this示例以获取更多信息。
然而,他们会将这些值存储在子对象中,因为在Python中没有私有或受保护的东西。
但另一种方法可以用于Django。在Django中,模型字段的存储取决于它们的值(CharField
,DateField
等),但是如果您要设置项值None
或任何其他静态值(例如"string"
}),这应该可以解决你的问题:
class Manager(Employee):
name = None
address = None
# other_stuffs.
在该示例中,Manager不应该在数据库中包含名称和地址列,当您尝试访问它们时,您将获得None
。如果你想获得AttributeError
(Django提出当对象没有请求密钥时),那么你也可以添加属性:
class Manager(Employee):
name = None
@property
def name(self):
raise AttributeError("'Manager' object has no attribute 'name'")