如何在Django中定义模型之间的多态关系?

时间:2009-01-06 10:12:18

标签: django django-models polymorphism associations

我正在开发一个包含Offer模型的Django应用程序。 Offer实例包含定价条件并指向产品定义。产品模型实际上是一个层次结构(我有Television模型,Camcorder模型等等。所以我希望Offer模型包含指向任何产品的多态(或“通用”)关联。

目前,我发现我只能使用generic associations in the ContentTypes application。这可能会,但我正在寻找替代品,如果有的话。

感谢您的帮助。

(每个答案一个解决方案请)

5 个答案:

答案 0 :(得分:4)

ContentTypes是正确的方法。 这是因为ForignKey只能指向一种类型的表,因此您需要通过一个中间表并根据不同的类型进行拆分。

因此,类层次结构的模型继承,但外键的ContentType。

答案 1 :(得分:3)

如果您只需指向“任何产品”,而不是任何型号,那么解决方案是拥有所有产品继承的产品型号(即电视和摄像机都是产品的子类),并提供您的优惠型号一个ForeignKey到产品。

答案 2 :(得分:2)

你不能在Django中这样做。使用generic relations或添加此功能的Django应用程序,例如django_polymorphic

答案 3 :(得分:1)

看一下django-polymorphic,它实现了这个功能,并在内部使用了ContentTypes。

答案 4 :(得分:-4)

您可能需要查看model inheritance