【问题标题】:How do I set this up?我该如何设置?
【发布时间】:2014-02-14 22:34:06
【问题描述】:

我正在尝试设置我的模型,以便我的数据具有这种关联:

我认为代码应该是这样的:

# green model
class green(models.Model):

# grey model
class grey(models.Model):

# blue model
class blue(models.Model):
    green = models.ManyToManyField(green, blank=True, null=True)
    grey = models.ForeignKey(grey, blank=True, null=True)

# red model
class red(models.Model):
    red = models.ManyToManyField(blue, blank=True, null=True)

也就是说,红色可以有很多蓝色,也可以有很多绿色和灰色。

我设置对了吗?我是否能够按照路径获取这些数据?

例如:找出所有绿色对象和蓝色1的灰色对象

或者我需要模型中的一些 id 来关联它们吗?

当我说 ids 时,我需要所有的蓝调都有一个红色的 id 吗?

【问题讨论】:

  • 很明显,红色、绿色和蓝色是站在对象中的,所以知道它们指的是什么会让这更容易。至少在图表上使用一些鱼尾纹。
  • 我正在尝试使其抽象化。这是一个例子,一个动物园有很多展品,每个展品都有很多动物和一个热水浴缸
  • 我会去那个动物园。

标签: python database django


【解决方案1】:

您的图表显示了所有事物之间的严格关系,即。绿色只属于一种蓝色,灰色只属于一种蓝色。

如果这是真的,那么您的建模将不起作用,您需要OneToOneFields 来映射灰色。此外,将related_name 添加到您的ForeignKeys 可以让您在查询时拥有一个“更干净”的名称。例如,blue_object.greens 与。 blue_object.green_set

以下代码允许red 对象拥有一组显式(非共享)blue 对象,以及它们自己的一组green 对象和一个不共享的gray 对象。

# green model
class green(models.Model):
    blue = models.ForeignKey(blue, blank=True, null=True, related_name="greens") # I belong to one blue

# grey model
class grey(models.Model):
    gray = models.OneToOneField(grey, blank=True, null=True)
    # Put here for consistancy with pointing to a parent.

# blue model
class blue(models.Model):
    red = models.ForeignKey(red, blank=True, null=True, related_name="blues") )

# red model
class red(models.Model):
    pass

【讨论】:

  • 你是从左到右读的吗?我从右到左读。那就是红色有很多蓝色,有很多绿色和灰色。我没有得到什么???
  • 是的。我正在正确阅读它。 ForeignKey blue 模型上的 ForeignKey 意味着许多 blues 可以链接到同一个 red 对象。
  • 乐高真的很酷!感谢您帮助解决这个问题!
  • 不,你需要去red_objects.blues.all()[0].greens.all() 例如,要获得第一个蓝色的所有绿色
  • 没有。你不能做第一个查询。对 Django 对象模型进行一些研究,如果您仍然遇到问题,请提出一个新问题。第二个应该工作。
猜你喜欢
  • 2010-11-06
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 2012-09-21
  • 2012-06-09
相关资源
最近更新 更多