Django:如何实现这些关系?

时间:2014-04-30 18:45:00

标签: python django django-models

对于某个应用,我有以下型号:

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数据库,这将是最不受欢迎的方式。

回顾:

  • 每个实例都可以拥有自己的图像。
  • 每个实例都可以在其父级或祖父母所拥有的图像上显示。
  • 可见性应与数据库中的一些额外日期一起存储
  • 目前,额外的数据总是相同的,与源类
  • 无关

0 个答案:

没有答案