0

Django の継承は私のニーズに合わないため、基本的には独自の継承スキームを考え出そうとしています。

親テーブル (クラス) に共通のデータ フィールドを保持してほしい。
サブクラスには、別のテーブルに独自の追加データがあります。

class ProductBase(models.Model):

    common = models.IntegerField()

    def get_price(self):
        return some_price


class FooProduct(ProductBase):

    # no field because I'm proxy

    class Meta:
        proxy = True

    def get_price(self):
        return price_using_different_logic


class FooExtra(models.Model):

    base = models.OneToOneField(ProductBase, primary_key=True)
    phone = models.CharField(max_length=10)

私の質問は、 Foo にFooExtraのフィールドがあるかのように扱うことができるでしょうか?

次のようなことをしたい..

foo = FooProduct.objects.create()

foo.phone = "3333"  # as django does with its multiple inheritance
foo.save()
FooProduct.objects.filter(phone="3333")  

異なる種類(データ)の商品を出品したい

  1. それらをまとめてリストする必要があるため、抽象ベース継承はアウトです

  2. リストから、各モデルをポリモーフィック モデルとして扱いたいと思います。ProductBase.objects.all() を反復処理する場合、product.get_price() は適切なクラスのメソッドを使用します。(必要がない場合は、参加する必要はありません)

  3. 必要なときにだけ、追加のテーブルデータを取得します(次のような方法で.select_related('fooextra')

Django-polymorphicは私が望むものに近いですが、それが何をするのかかなり曖昧なので、私はそれを使用することを恐れており、失敗していると思います #3.

4

2 に答える 2