django - 使用外键进行多表继承

时间:2013-07-24 19:41:24

标签: python django django-models django-inheritance

我在数据库设计中处于一个奇怪的位置,我会很感激一些评论。我们正在使用django-shop作为电子商务平台。为产品定义了基类:

from polymorphic.polymorphic_model import PolymorphicModel

class BaseProduct(PolymorphicModel):
    ...
    class Meta:
        abstract = True

我们为自己的Product对象扩展了这个基类:

class Product(BaseProduct):
    # custom fields

我们现在想要创建另一个对象,表示对此Product对象的提议,如:

class Offer(models.Model):
    product = models.ForeignKey(Product)
    # more

我们希望将此Offer对象添加到购物车中,并在订单中使用,就像常规Product类一样。但是,CartOrder类需要Product

类型的对象
class Order(models.Model):
    product = models.ForeignKey(Product)

因此,我们无法将Offer个对象添加到购物车,也不能将它们保存在订单中。

我正在考虑将Offer作为Product的子类,但不是在典型的多表继承中使用OneToOne关系,而是以某种方式将其更改为常规的ForeignKey。我甚至不确定这是否有意义,更不用说是可能了。

我们的数据库已经在生产中部署了许多Product个对象,而这个要约类是我们想要添加到顶部的,而不修改其余的。

有关如何处理此事的任何想法?

1 个答案:

答案 0 :(得分:0)

使用Model Inheritance

class Offer(Product):

    products = ManyToManyField(Product, related_name='offers')

这将创建一个报价(也是一个产品,因此可以添加到购物车中),该报价也指向了许多相关产品。

为什么不使用django-shop-discounts

而不是“向购物车添加优惠”