覆盖子模型中的外键关系?

时间:2015-04-03 21:54:30

标签: python django models

我想在django 1.7中做一些model inheritance ,我想知道是否有办法超越外键字段?我有一个课程架构,我希望能够定义具有相同功能(页面,问题,级别等)的多个课程。

这是我的代码:

http://hastebin.com/ixekepolik.py(第117,118,120,121,123,129和131行)

我目前收到此错误:

django.core.exceptions.FieldError: Local field 'level' in class 'HVPage' clashes with field of similar name from base class 'Page'

1 个答案:

答案 0 :(得分:0)

根据我的阅读here,目前不允许(在django 1.7中)

  

不允许字段名称“隐藏”¶

     

在普通的Python类继承中,允许孩子使用   用于覆盖父类的任何属性的类。在Django中,这个   不允许属于Field实例的属性(至少,   现在不行)。如果基类有一个名为author的字段,那么   无法在任何类中创建另一个名为author的模型字段   继承自该基类。

     

覆盖父模型中的字段会导致区域出现问题   例如初始化新实例(指定正在进行的字段)   在Model。 init )和序列化中初始化。这些都是功能   普通的Python类继承没有必要处理   同样的方式,所以Django模型继承的区别   和Python类继承不是任意的。

     

此限制仅适用于Field实例的属性。   如果您愿意,可以覆盖正常的Python属性。它也只是   适用于Python看到的属性名称:如果是的话   手动指定数据库列名称,您可以拥有相同的名称   列名出现在子模型和祖先模型中   多表继承(它们是两个不同数据库中的列   表)。

     

如果覆盖任何模型字段,Django将引发FieldError   祖先模型。