我正在尝试设置我的模型,因此我的数据具有以下关联:
以下是我认为代码应该是这样的:
# 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)
红色可以有很多蓝色,可以有很多绿色和灰色。
我设置正确吗?我是否可以按照路径获取此数据?
例如:找到所有绿色对象和blue1的灰色对象
或者我的模型中是否需要一些ID来关联它们?
当我说ids时,我是否需要所有蓝调才能获得红色ID?
答案 0 :(得分:1)
你的图表显示了一切之间的严格关系,即。绿色只属于一个蓝色,灰色只属于一个蓝色。
如果这是真的,那么你的建模将不起作用,你需要OneToOneFields来映射灰色。此外,在related_name
中添加ForeignKey
可让您在查询时拥有“更干净”的名称。例如,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