我想在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'
答案 0 :(得分:0)
根据我的阅读here,目前不允许(在django 1.7中)
不允许字段名称“隐藏”¶
在普通的Python类继承中,允许孩子使用 用于覆盖父类的任何属性的类。在Django中,这个 不允许属于Field实例的属性(至少, 现在不行)。如果基类有一个名为author的字段,那么 无法在任何类中创建另一个名为author的模型字段 继承自该基类。
覆盖父模型中的字段会导致区域出现问题 例如初始化新实例(指定正在进行的字段) 在Model。 init )和序列化中初始化。这些都是功能 普通的Python类继承没有必要处理 同样的方式,所以Django模型继承的区别 和Python类继承不是任意的。
此限制仅适用于Field实例的属性。 如果您愿意,可以覆盖正常的Python属性。它也只是 适用于Python看到的属性名称:如果是的话 手动指定数据库列名称,您可以拥有相同的名称 列名出现在子模型和祖先模型中 多表继承(它们是两个不同数据库中的列 表)。
如果覆盖任何模型字段,Django将引发FieldError 祖先模型。