3

これが私が使用していたものです:

class a(models.Model):
    x = models.CharField()

class b(a):
    pass

これの問題は、b のインスタンスが作成されると、a のインスタンスも作成されることです。これは、b がデータベース テーブルなどの Django が割り当てるプロパティを継承しているためだと思います。この重複が起こらないように、b にすべてのフィールドとメソッドを持たせたいと思います。a から b にすべてのコードを単純にコピー アンド ペーストしたり、抽象基本クラス c を使用して a と b の両方を c から継承したりすることなく、これを行うにはどうすればよいでしょうか (2 つのモデル/クラスのみが必要です)。メタクラスを使用する必要がありますか?

4

2 に答える 2

6
class A(models.Model):
    #some fields here
    x = models.CharField()
    class Meta:
        abstract = True

class B(A):
    pass

Aは抽象クラスになり、このクラスを単独で使用することはできません。しかし、私が理解したように、2 つの実際のクラスAB. この場合、3 番目の (抽象) クラスが必要ですC。したがって、それらは抽象フィールドからフィールドを継承し、それらに追加のフィールドを追加します。

例: 抽象が C であるとします。

class C(models.Model):
    # the common fields 
    class Meta:
        abstract = True
class A(C):
    #extra fields if you need or pass
class B(C):
     #extra fields if you need or pass
于 2012-11-02T09:15:36.337 に答える
1

抽象モデルaを作成する:

class a(models.Model):
    class Meta:
        abstract = True
    x = models.CharField()

Aまた、クラス名は大文字である必要があるため、andBである必要がありますが、x正しいことに注意してください。

于 2012-11-02T05:34:31.870 に答える