我该如何设置?

时间:2014-01-24 03:52:21

标签: python database django

我正在尝试设置我的模型,因此我的数据具有以下关联:

Database Diagram

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

# 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?

1 个答案:

答案 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