Django模型类继承 - 默认字段和覆盖

时间:2011-02-14 22:01:33

标签: python django class inheritance

我正在尝试继承类模板,因此我的所有模型都有某些默认字段,并且所有模型都有默认覆盖,例如save_model()

如果我这样做,我会得到覆盖,但必须去手动设置元数据,如db_table ......

class ModelExtension(models.Model):
    altered_by = models.CharField(max_length=64)

class SomeModel(ModelExtension):
    class Meta:
        db_table = 'app_somemodel'
    fields = models.CharField()
    ...

有没有办法让这种继承正常工作?到目前为止,我要么做额外的工作来弥补这种方法的缺点,要么我受到MRO错误的困扰.2

2 个答案:

答案 0 :(得分:3)

什么是MRO错误?你读过关于模型继承的django文档了吗?您可以拥有抽象基类,多表继承或代理模型。

http://docs.djangoproject.com/en/1.2/topics/db/models/#abstract-base-classes

你所做的是一个多表继承 - 有一个隐藏的OneToOneField连接你的两个模型。我不知道为什么你认为你需要指定db_table - 它不应该是。

如果您永远不会拥有裸类ModelExtension的对象,那么您需要抽象基类。在这种情况下,您在Meta部分中放置abstract = True,然后将基类中的所有字段添加到子类的表中。文档比我在这里解释得更好。

我经常发现自己开始以某种方式进行操作,然后在我更多地考虑我的数据库结构时来回翻转几次....

答案 1 :(得分:0)

如果您只想将新功能添加到模型而不更改其字段,请使用proxy model