如何处理这种多继承情况?

时间:2013-07-05 12:26:15

标签: django database-design

问题

我有“基本模型”Listing,它负责存储我们将发布到我们网站的每个可能项目的基本数据。 Listing具有最基本的详细信息,而EquipmentMaterial等继承的模型应使用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中的所有字段,例如priceyearmake等,但他们占用了空间并制作了{ {1}}模型有点难看。我们希望将其拆分为单独的更轻量级和可扩展的模型。

现在我遇到了各种问题,试图找到ListingListing.material.price以及对后端发生的事情的错误理解。

我该怎么办!?我该如何解决这个问题?如果模型中有大约15-20个未使用的潜在空字段,这是一个巨大的禁忌吗?

0 个答案:

没有答案