2011-05-19 98 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