8

既存のデータ モデルと互換性のある Django ORM マッピングを作成しようとしているため、既存のテーブル名と列名のセットを操作しようとしています。

クラス InformationObject がクラス Object から派生する複数テーブル継承の状況があります。Django にこれを通常の方法で処理させたい:

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

class InformationObject(Object):
    class Meta:
        db_table = "information_object"

この場合、Django はobject_ptr_idという継承モデルに 1 対 1 のフィールドを自動的に作成します。ただし、私が使用するように制約されているスキーマでは、オブジェクトへの参照は単に「id」と呼ばれます。そう:

Djangoが複数テーブルの継承に自動的に使用する列の名前を何らかの方法で指定する方法はありますか?

別の方法で使用する必要がある代替手段は、明示的な 1 対 1 のフィールドを使用することですが、そうするとオブジェクト モデルからデータベース以外のメソッドを継承できなくなります。

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")  

何か案は?たぶん、両方に共通の基本クラスを作成し、そこに非dbメソッドを配置できますか...?

4

2 に答える 2

9

django ドキュメント(開発版)から:

前述のように、Django は子クラスを非抽象親モデルにリンクする OneToOneField を自動的に作成します。親に戻る属性の名前を制御したい場合は、独自の OneToOneField を作成し、parent_link=True を設定して、フィールドが親クラスに戻るリンクであることを示すことができます。

于 2011-10-04T08:52:56.137 に答える