2017-07-16 125 views
0

Iesi填入時遇到下面的表格Django的多對多的關係,用一個表有兩個或多個模型

  1. 酒店(型號)

    • ID
  2. 客房(型號)

    • ID
  3. 設施(型號)

    • ID
    • 名稱
  4. facility_properties

    • facility_id
    • linking_id
    • 類型(酒店或房間)

在Django我想創建一個鏈接。在酒店和房間中,我想使用facility_properties表作爲多對多的鏈接表。 它可以是酒店和設施鏈接或房間和設施鏈接。 linking_id可以是酒店ID或房間ID,其中類型定義其酒店或房間

回答

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() 
相關問題