我有三個模型類。說圖像,人物和地點。 每個位置有多個人,每個人可以有多個圖像。 每個位置都由圖像表示。Django:外鍵和模型的關係
我有圖像 - 位置(字段)外鍵到位置和位置 - 圖像(字段)外鍵到圖像。 我知道這是循環的。並且會拋出一個錯誤。替代方案會是什麼/一個可行的解決方案?
編輯:人們可以有多個圖像。
我有三個模型類。說圖像,人物和地點。 每個位置有多個人,每個人可以有多個圖像。 每個位置都由圖像表示。Django:外鍵和模型的關係
我有圖像 - 位置(字段)外鍵到位置和位置 - 圖像(字段)外鍵到圖像。 我知道這是循環的。並且會拋出一個錯誤。替代方案會是什麼/一個可行的解決方案?
編輯:人們可以有多個圖像。
使用OneToOneField
在這裏看到:http://docs.djangoproject.com/en/dev/ref/models/fields/#onetoonefield
的替代方法是刪除從Image
的外鍵Location
,因爲我猜你通常會從位置周圍抓住了形象,而不是其他方式(如果我錯了,切換它)。然後,您必須將反向關係解析爲引用對象的列表,而不是唯一的對象。使用ForeignKey(unique=True)
也可能解決這個問題。
編輯: 嘗試從圖像中刪除所有外鍵引用。使用從Location
到Image
的OneToOneField。然後,使用從Person
到Image
的ForeignKey。不要在圖像中放置外鍵。您仍然可以訪問給定圖像的反向關係。
你想這樣的:
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)
[...]
人員和地點可以擁有相同的圖像。抱歉。請看我的編輯 – thebanks 2011-05-19 16:51:23
其實我開始寫出來'ForeignKey的(唯一= TRUE)'的想法,並通過實現中途有一個與它的問題:有什麼能阻止一個人,一個從具有相同圖像的位置,這可能不是他想要的。 'OneToOneField'有同樣的問題(這只是FK unique = True的簡寫),這就是爲什麼我將其編輯出來的原因。真的,問題是他需要零圖像表(每個人/位置的圖像數據)或兩個圖像表(一個用於各種用途)。我的投票是零表。 – 2011-05-19 15:43:17
人員和地點可以具有相同的圖像。抱歉。請看我的編輯。 – thebanks 2011-05-19 15:51:20