5

既存のモデルを (完全に別のアプリケーションから) サブクラス化し、モデルに独自のデータベース テーブルを持たせたいと考えています。「親」テーブルに格納されたデータへのポインタを持つテーブルだけでなく、元のテーブルの同一のクローン/レプリカ。

これが私のモデルです:

class A (models.Model):
    name = models.CharField('name')

class MyA (A):
    class Meta:
        db_table = 'My_A'

これが私のDBテーブルです:

CREATE TABLE A
(
  id serial NOT NULL,
  "name" character varying(50) NOT NULL,
  ...
)

CREATE TABLE My_A
(
  A_ptr_id integer NOT NULL,
  ...
)

そして、ここに私が欲しいものがあります:

CREATE TABLE A
(
  id serial NOT NULL,
  "name" character varying(50) NOT NULL,
  ...
)

CREATE TABLE My_A
(
  id serial NOT NULL,
  "name" character varying(50) NOT NULL,
  ...
)

編集:サードパーティのモデルをコピーして貼り付けてしまいました

4

3 に答える 3

4

私があなたを正しく理解していれば、独自のテーブルを持たない抽象基本クラスを作成できます。そこから、独自のテーブルを持つその基本クラスから継承する複数のクラスを作成できます。

class ABase(models.Model):
    name = models.CharField('name')
    class Meta:
        abstract = True

class A(ABase):
    class Meta:
        db_table = 'A'

class MyA(ABase):
    class Meta:
        db_table = 'My_A'

Django 2.2 ドキュメント - 抽象基底クラス

于 2019-06-12T01:36:08.223 に答える
0

新しいアプローチ (データの分離を主張する場合): A から継承せずにモデル MyA を作成し、My と A への明示的な汎用外部キーを作成する別のモデル MergeA を作成します。ただし、これには確かにかなりの追加コーディングが必要になります。

于 2012-08-22T09:13:34.503 に答える
-1

Django モデルを継承すると、常に親モデルとの暗黙の 1 対 1 の関係が生成されます。また、Django は継承されたモデルのフィールドのみを生成します。これは一般的に私にとって完全に理にかなっています。しかし、あなたのユースケースは面倒です。Django のコア機能について話しているので、回避するのは難しいかもしれません。サード パーティのモデルをプロキシ モデルとしてコードにコピー アンド ペーストし、そこから継承することができます。

更新: しかし、なぜデータを異なるテーブルに分けたいのでしょうか? 最終的な目的は何ですか?

于 2012-08-22T07:33:14.523 に答える