2011-02-14 126 views
0

我试图继承类模板,让我所有的车型都有一定的默认领域,并都像save_model()的一些功能Django的模型类的继承 - 默认领域和覆盖

如果默认覆盖我不喜欢这样,我得到了覆盖,但后来不得不去手动设置像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

回答

3

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

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

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

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

我经常发现自己开始做这件事,然后,因为我觉得我的更多的数据库结构来回翻转几次....

+0

如果我没有指定db_table,所有继承的模型都有一个db_table'app_modelextension' – samurailawngnome 2011-02-15 03:30:58

+0

呵呵,好的。我认为abstract = True已经做到了。 – samurailawngnome 2011-02-15 03:34:58

0

如果你只是想新功能添加到模型没有改变它的领域,使用proxy model