2011-05-19 96 views
0

我有三個模型類。說圖像,人物和地點。 每個位置有多個人,每個人可以有多個圖像。 每個位置都由圖像表示。Django:外鍵和模型的關係

我有圖像 - 位置(字段)外鍵到位置和位置 - 圖像(字段)外鍵到圖像。 我知道這是循環的。並且會拋出一個錯誤。替代方案會是什麼/一個可行的解決方案?

編輯:人們可以有多個圖像。

回答

1

使用OneToOneField在這裏看到:http://docs.djangoproject.com/en/dev/ref/models/fields/#onetoonefield

的替代方法是刪除從Image的外鍵Location,因爲我猜你通常會從位置周圍抓住了形象,而不是其他方式(如果我錯了,切換它)。然後,您必須將反向關係解析爲引用對象的列表,而不是唯一的對象。使用ForeignKey(unique=True)也可能解決這個問題。

編輯: 嘗試從圖像中刪除所有外鍵引用。使用從LocationImage的OneToOneField。然後,使用從PersonImage的ForeignKey。不要在圖像中放置外鍵。您仍然可以訪問給定圖像的反向關係。

+0

其實我開始寫出來'ForeignKey的(唯一= TRUE)'的想法,並通過實現中途有一個與它的問題:有什麼能阻止一個人,一個從具有相同圖像的位置,這可能不是他想要的。 'OneToOneField'有同樣的問題(這只是FK unique = True的簡寫),這就是爲什麼我將其編輯出來的原因。真的,問題是他需要零圖像表(每個人/位置的圖像數據)或兩個圖像表(一個用於各種用途)。我的投票是零表。 – 2011-05-19 15:43:17

+0

人員和地點可以具有相同的圖像。抱歉。請看我的編輯。 – thebanks 2011-05-19 15:51:20

1

你想這樣的:

class Image(models.Model): 
    [...] 

class Location(models.Model): 
    image = models.ForeignKey(Image) # or use OneToOneField if every location has a unique image 
    [...] 

class Person(models.Model): 
    location = models.ForeignKey(Location) 
    images = models.ManyToManyField(Image) 
    [...] 
+0

人員和地點可以擁有相同的圖像。抱歉。請看我的編輯 – thebanks 2011-05-19 16:51:23