既存のdata modelと互換性のあるDjango ORMマッピングを作成しようとしていますので、既存のテーブルとカラムのセットを使用しようとしています名前。Djangoマルチテーブル継承:カスタム1対1の列名を指定
クラスインフォメーションオブジェクトがクラスオブジェクトから派生したマルチテーブル継承状況があります。 Djangoが自動的にがをobject_ptr_idと呼ばれる継承モデルに一対一のフィールドを作成します。この場合
class Object(models.Model):
class Meta:
db_table = "object"
class InformationObject(Object):
class Meta:
db_table = "information_object"
:私は、Djangoはこのに通常の方法を処理できるようにしたいと思います。しかし、私が使用することが制限されているスキーマでは、オブジェクトへの参照は単に "id"と呼ばれます。だから:
何とかDjangoが自動的にマルチテーブルの継承に使用するカラムの名前を指定する方法はありますか?私がそうでなければ使用する必要があります
代わり、明示的な一対一のフィールドを使用することですが、その後、私は、オブジェクトモデルからデータベース以外のメソッドを継承することはできません。
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メソッドをそこに置くことができます...? django docs(開発版)から
あなたの最後のアイデアはかなりしっかりしている:それらの両方のための共通の基底クラスを作成し、あなたが探しているの余分な機能を提供するために、ミックスインとしてそれを使用します。私は実験として試してみることをお勧めします。 (これはうまくいかないかもしれません; Djangoのデータベース層は、Pythonのメタクラスでかなりのことを行いますが、試してみる価値があります)。 –