Django orm / many-to-many关系分析

1.关于多对一关系/多对多关系在代码中的特点,总结了下清楚很多.

多对一/一对多
    创建外键表的字段有选择权(1对1)
    被关联的表的字段有被选择权,被动对应多个选择它的外表的字段(多对1)

多对多
    具有选择权表的字段同时也有被选择权
    不具有选择权表的字段同时也有选择权

2.Django-ORM中的多对多关系

class A(models.Model):
    books = models.ManyToManyField(关联表名)
class B(models.Model):
    books = models.ManyToManyField(A)         # 创建表三,添加两张表的主键作为 第三章表字段
				                  # 表B中创建了操作第三张表的对象,而不是字段


-------------------------------------------------------------------------


需要注意的是 :1.表B中创建的Many-to-Many对象仅仅是用来操作第三张表的中间对象,而不是字段
              2.通过books对象获取到的是表A对象
              3.多对多创建的第三行表仅仅是为了查询A,B对象的对应关系

正向查询调用
# 在表B中创建 A与B关联的第三章表,
# 表B对象主键值作为查询条件,查询结果为表A对象主键值
# 通过表B创建与表A关联的第三张表,方便查询所有与B对象关联的A对象

-------------------------
B.books.all()执行过程
# 通过B_obj.pk去 A_B表 中查询所有对应B_obj.pk的A_obj主键值
# 在根据A_obj.pk去A表中查询主键所对应的行对象
# 返回所有A对象

猜你喜欢

转载自www.cnblogs.com/zhangRT312/p/12680901.html
今日推荐