我正在尝试继承类模板,因此我的所有模型都有某些默认字段,并且所有模型都有默认覆盖,例如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
答案 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!