django - 使用外键进行多表继承
我被困在我的数据库设计中的一个奇怪的位置,我将不胜感激一些评论。我们正在使用django-shop来建立电子商务平台。没有为产品定义的基类:django - 使用外键进行多表继承
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
类。然而,Cart
和Order
类预计类型的对象Product
class Order(models.Model):
product = models.ForeignKey(Product)
所以,因为它是,我们不能Offer
对象添加到购物车,或者将它们保存订单。
我正在考虑将Offer
作为Product
的一个子类,但不是在典型的多表继承中使用OneToOne关系,而是以某种方式将其更改为常规的ForeignKey。我甚至不确定这是否有意义,更不用说可能了。
我们的数据库已经在生产环境中部署了许多Product
对象,而这个offer类是我们想要添加的东西,而没有修改剩下的东西。
有关如何解决这个问题的任何想法?
class Offer(Product):
products = ManyToManyField(Product, related_name='offers')
这将创建一个报价(这也是一种产品,因此可以被添加到购物车)也指出在一些相关的产品。
除了“将商品添加到购物车”之外,为什么不使用django-shop-discounts呢?
我们用这种方法发现的问题是将提供和产品分离。我明白,在这种方法中,如果创建一个Offer对象,这也会创建一个Product model并将它们链接起来。但是,鉴于数据库中已经有Product对象,我们可以创建一个或多个Offer对象,并将其''product_ptr''重载为指向这些现有对象? – user1496984
我说谎了一点,它不是外键,而是一对一的关系。所以不,你不能有多个产品指向一个产品。查看我的编辑。 – Thomas
这可能取决于'Offer'的行为与购物车中'Product'的不同。它们是否足够相似以致'Offer'可以被认为是不同类型的'Product',并以某种方式将它们应用到当前的Product产品模型中?也许还有一些其他的继承可以做,让你不必改变产品,别人可能知道。 – trpt4him