Django多表继承:指定自定义的一对一列名

Mik*_*ame 8 django inheritance multi-table

我正在尝试创建一个与现有数据模型兼容的Django ORM映射,因此我尝试使用现有的一组表名和列名.

我有一个多表继承的情况,其中一个类InformationObject派生自类Object.我想让Django以通常的方式处理这个问题:

class Object(models.Model):
    class Meta:
        db_table = "object"          

class InformationObject(Object):
    class Meta:
        db_table = "information_object"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Django会自动在继承模型上创建一个名为object_ptr_id的一对一字段.但是,在我被限制使用的模式上,对Object的引用简称为"id".所以:

有没有办法以某种方式指定Django自动神奇地用于多表继承的列的名称?

替代方案,我将不得不使用,是使用显式的一对一字段,但后来我将无法从Object模型继承非数据库方法:

class Object(models.Model):
    class Meta:
        db_table = "object"          

class InformationObject(models.Model):
    class Meta:
        db_table = "information_object"
    id = models.OneToOneField(Object, primary_key=True, db_column="id")  
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?也许我可以为它们创建一个公共基类并将非db方法放在那里......?

fus*_*ion 9

来自django docs(开发版):

如上所述,Django将自动创建一个OneToOneField,将您的子类链接回任何非抽象的父模型.如果要控制链接回父级的属性的名称,可以创建自己的OneToOneField并设置parent_link = True以指示您的字段是返回父类的链接.