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")
異なる種類(データ)の商品を出品したい
それらをまとめてリストする必要があるため、抽象ベース継承はアウトです
リストから、各モデルをポリモーフィック モデルとして扱いたいと思います。ProductBase.objects.all() を反復処理する場合、product.get_price() は適切なクラスのメソッドを使用します。(必要がない場合は、参加する必要はありません)
必要なときにだけ、追加のテーブルデータを取得します(次のような方法で
.select_related('fooextra')
Django-polymorphicは私が望むものに近いですが、それが何をするのかかなり曖昧なので、私はそれを使用することを恐れており、失敗していると思います #3.