0

問題

Listing私たちのサイトに投稿する可能性のあるすべてのアイテムの基本データを格納する責任を負う「基本モデル」があります。AListingには最も基本的な詳細がありますが、継承されたモデルは のようにEquipment、またはMaterialのような必要なものでそれを拡張する必要がありpriceます。

たとえば、特定のフィールドListingで拡張したい があります。Equipment

それを解決しようとする私の現在の試み

私は次のモデルを持っています:

class Listing(models.Model):
    title = models.CharField(max_length=100)
    # listing stuff

class AbstractListingGood(models.Model):
    price = MoneyField(max_digits=10, decimal_places=2, default_currency='USD', null=True, blank=True)
    # other listing goods details

    class Meta:
        abstract = True

class Equipment(AbstractListingGood, Listing):
    year = models.PositiveIntegerField(max_length=4, null=True, blank=True)
    make = models.CharField(max_length=50, null=True, blank=True)
    model = models.CharField(max_length=50, null=True, blank=True)
    # equipment details

class Material(AbstractListingGood, Listing):
    hazardous = models.CharField(max_length=50, null=True, blank=True)

そして、これが私がベースオブジェクトを作成し、フィールドListingを持つように拡張しようとしている方法です:Equipment

extended_obj = Material(listing_ptr_id=obj.pk)
extended_obj.price = form.cleaned_data['price']
extended_obj.quantity = int(form.cleaned_data['quantity'])

for (key, value) in obj.__dict__.items():
    setattr(extended_obj, key, value)

extended_obj.save()

私の解決策の問題

以前は、、 、 などのListingようにすべてのフィールドが存在していましたが、それらはスペースを占有し、モデルを醜いものにしていました。それを、より軽量で拡張可能な別々のモデルに分割したかったのです。priceyearmakeListing

今、私は、バックエンドで何が起こっているのかを見つけようとするあらゆる種類の問題とListing.material.price、多くの誤解を抱えています。Listing.equipment.price

私は何をすべきか!?この問題を解決するにはどうすればよいですか? 使用されていない可能性のある空のフィールドが 15 ~ 20 個あるモデルを使用することは、非常に危険なことですか?

4

0 に答える 0