問題
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
ようにすべてのフィールドが存在していましたが、それらはスペースを占有し、モデルを醜いものにしていました。それを、より軽量で拡張可能な別々のモデルに分割したかったのです。price
year
make
Listing
今、私は、バックエンドで何が起こっているのかを見つけようとするあらゆる種類の問題とListing.material.price
、多くの誤解を抱えています。Listing.equipment.price
私は何をすべきか!?この問題を解決するにはどうすればよいですか? 使用されていない可能性のある空のフィールドが 15 ~ 20 個あるモデルを使用することは、非常に危険なことですか?