Django:外键和模型关系

Django:外键和模型关系,django,django-models,Django,Django Models,我有三节模型课。说形象、人物和地点。 每个位置有多个人,每个人可以有多张图像。 每个位置都由一个图像表示 我有图像-位置(字段)外键到位置和位置-图像(字段)外键到图像。 我知道这是循环的。并将抛出一个错误。替代方案是什么/可行的解决方案 编辑:用户可以有多个图像。使用此处显示的OneToOneField: 另一种方法是将外键从图像移到位置,因为我猜您通常会从该位置抓取图像,而不是从另一个位置抓取图像(如果我错了,请切换)。然后,必须将反向关系解析为引用对象列表,而不是唯一对象。使用Foreig

我有三节模型课。说形象、人物和地点。 每个位置有多个人,每个人可以有多张图像。 每个位置都由一个图像表示

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


编辑:用户可以有多个图像。

使用此处显示的
OneToOneField

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

编辑: 尝试从图像中删除所有外键引用。从
位置
图像
使用OneToOneField。然后,使用外键从
Person
Image
。不要在图像中放置外键。您仍然可以访问给定图像的反向关系。

您希望:

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)
    [...]

实际上,我开始写
ForeignKey(unique=True)
的想法,并在中途意识到它有一个问题:没有什么能阻止一个人和一个位置拥有相同的图像,这大概不是他想要的
OneToOneField
也有同样的问题(它只是FK unique=True的简写),这就是为什么我在回复中删掉了它。实际上,问题是他要么需要零个图像表(每个人/位置中的图像数据),要么需要两个图像表(每个用途一个)。我投票支持零张桌子。人和地点可以有相同的形象。很抱歉请查看我的编辑。人员和位置可以具有相同的图像。很抱歉请看我的编辑