重写子模型中的外键关系?

2024-10-03 23:18:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在django1.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'

Tags: 方法代码功能httpfieldmodel定义inheritance
1条回答
网友
1楼 · 发布于 2024-10-03 23:18:11

从我读到的here来看,它目前是不允许的(在django1.7中也是如此)

Field name “hiding” is not permitted¶

In normal Python class inheritance, it is permissible for a child class to override any attribute from the parent class. In Django, this is not permitted for attributes that are Field instances (at least, not at the moment). If a base class has a field called author, you cannot create another model field called author in any class that inherits from that base class.

Overriding fields in a parent model leads to difficulties in areas such as initializing new instances (specifying which field is being initialized in Model.init) and serialization. These are features which normal Python class inheritance doesn’t have to deal with in quite the same way, so the difference between Django model inheritance and Python class inheritance isn’t arbitrary.

This restriction only applies to attributes which are Field instances. Normal Python attributes can be overridden if you wish. It also only applies to the name of the attribute as Python sees it: if you are manually specifying the database column name, you can have the same column name appearing in both a child and an ancestor model for multi-table inheritance (they are columns in two different database tables).

Django will raise a FieldError if you override any model field in any ancestor model.

相关问题 更多 >