Django有很多很多关系,使用一个表用于两个或更多模型

时间:2017-07-16 04:55:03

标签: django many-to-many relationship

iesi有下表

  1. 酒店 (型号)

    • ID
    • 名称
  2. 会议室 (型号)

    • ID
    • 名称
  3. 设施 (型号)

    • id
    • 名称
  4. facility_properties

    • facility_id
    • linking_id
    • 输入(酒店或房间)
  5. 在Django中我想创建一个链接。在酒店和房间我想使用facility_properties表作为多对多链接表。 它可以是酒店和设施连接或房间和设施连接。 linking_id可以是酒店ID或房间ID,其中类型定义其酒店或房间

1 个答案:

答案 0 :(得分:0)

您需要使用GenericForeignKey,以便与任何类型的模型建立关系。

翻译您需要的内容会导致:

class FacilityProperty(models.Model):
    facility = models.ForeignKey(facility, on_delete=CASCADE)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    linking_id = models.PositiveIntegerField()
    link_object = GenericForeignKey('content_type', 'linking_id')

link_object将指向HotelRoom,具体取决于您如何使用该关系。

以下是一个例子:

h = Hotel.objects.create()
r = Room.objects.create()
f = Facility.objects.create()

prop = FacilityProperty(link_object=h, facility=f)
prop.save()

prop = FacilityProperty(link_object=r, facility=f)
prop.save()