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()

我的解决方案的问题

我曾经只是让所有字段都出现在Listinglike price, year,make等中,但是它们占用了空间并使Listing模型有点难看。我们想将其拆分为更轻量级和可扩展的单独模型。

现在我遇到了各种各样的问题,试图找出Listing.material.priceListing.equipment.price后端发生的事情的许多误解。

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

4

0 回答 0