对于某个应用,我有以下型号:
Parent(models.Model):
pass
Child(models.Model):
parent = models.ForeignKey(Parent)
GrandChild(models.Model):
child = models.ForeignKey(Child)
每个模型都可以有一个图像(代码中未显示)。除此之外,每个实例都可以在其父或祖父的图像上可见。 例如,可以有一个GrandChild A,它在相关的Child B上可见,甚至可以在父模型C上看到,它是B的父模型。我想在数据库中存储哪些实例在图像中可见,还有一些需要其他信息,例如实例在图像中的位置。如何使用Django或实现这种结构的最佳方法是什么?
这些是我想到的想法:
使用ForeignKey将图像作为自己的模型实现到每个可能的类:
可见性将作为与直通模型的多对多关系实现。所以像这样:
Image(models.Model):
image = ImageField()
related_parent = models.ForeignKey(Parent)
related_child = models.ForeignKey(Child)
....
VisibleObject(models.Model):
object = models.ForeignKey(Parent)
image = models.ForeignKey(Image)
# ... additional Fields
据我所知,这种方法存在的问题是许多外国人从未被使用过,而且具有误导性。这种做法似乎是不洁净的。
将图片实施为ContentType
因此上面的图像仍然是一个类,但是使用ContetTypes Frameworke而不是ForeignKeys。这个解决方案似乎更清晰,但我不知道如何存储关系的额外数据。
切换到NoSQL数据库
这也许是一种可能性。但由于我不熟悉noSQL数据库,这将是最不受欢迎的方式。
回顾: