我有“基本模型”Listing
,它负责存储我们将发布到我们网站的每个可能项目的基本数据。 Listing
具有最基本的详细信息,而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
等,但他们占用了空间并制作了{ {1}}模型有点难看。我们希望将其拆分为单独的更轻量级和可扩展的模型。
现在我遇到了各种问题,试图找到Listing
与Listing.material.price
以及对后端发生的事情的错误理解。
我该怎么办!?我该如何解决这个问题?如果模型中有大约15-20个未使用的潜在空字段,这是一个巨大的禁忌吗?