Django Model一对多、多对多关系

在Django的Model中,可以定义多种关系:一对一,多对一/一对多,多对多。

分别为:

  • 一对一:OneToOneField
  • 多对一:ForeignKey
  • 多对多:ManyToManyField

可以更加natural的表述为:

  • 多个属于一个,即 belong to : ForeignKey,多个属于一个
  • 一个有一个,即 only has one: OneToOneField
  • 一个有很多个,即 has many: lots of A belong to B 与 B has many A,在建立 ForeignKey 时,另一个表会自动建立对应的关系
  • 一个既有很多个,又属于很多个,即 has many and belong to : ManyToManyField,同样只能在一个model类中说明,关联表会自动建立。

在官方的tutorial中,有这样一个例子:

在Model定义中表现了如下一对多关系:

我们可以看到,在“多”的一方(Choice)中定义了“一”的一方(Question)的外键。

当从“多”的一方展开查询时,只需要指明属性名即可

当从“一”的一方展开查询时,则需创建一个foo_set集合:

对于多对多关系,其实和一对多非常的像,定义ManyToManyField的Model访问和它关联的Model时,直接访问该Model的名字就可以了,反过来,就需要加上“_set”了。

参考:http://logic0.blog.163.com/blog/static/18892814620137343447299/

http://blog.csdn.net/hackerain/article/details/39838559

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注