问题
我有一个“基本模型” 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
like price
, year
,make
等中,但是它们占用了空间并使Listing
模型有点难看。我们想将其拆分为更轻量级和可扩展的单独模型。
现在我遇到了各种各样的问题,试图找出Listing.material.price
对Listing.equipment.price
后端发生的事情的许多误解。
我应该怎么办!?我应该如何解决这个问题?拥有一个具有大约 15-20 个未使用的潜在空字段的模型是否是一个巨大的禁忌?