Django:外键和模型关系

时间:2011-05-19 15:23:06

标签: django django-models

我有三个模型类。说图像,人物和位置。 每个位置有多个人,每个人可以拥有多个图像。 每个位置都由图像表示。

我有Image - 位置(字段)外键到位置和位置 - 图像(字段)外键到Image。 我知道这是循环的。并会抛出一个错误。什么是替代方案/可行的解决方案?

编辑:人们可以拥有多张图片。

2 个答案:

答案 0 :(得分:1)

使用此处显示的OneToOneFieldhttp://docs.djangoproject.com/en/dev/ref/models/fields/#onetoonefield

另一种方法是将外键从Image移到Location,因为我猜你通常会从该位置抓取图像而不是相反(如果是我错了)。然后,您必须将反向关系解析为引用对象列表,而不是唯一对象。使用ForeignKey(unique=True)也可以解决此问题。

编辑: 尝试从图像中删除所有外键引用。使用LocationImage中的OneToOneField。然后,使用从PersonImage的ForeignKey。不要将外键放在图像中。您仍然可以在给定图像的情况下访问反向关系。

答案 1 :(得分: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)
    [...]