美文网首页
(七) 模型之间的关系

(七) 模型之间的关系

作者: fanhang64 | 来源:发表于2018-03-21 11:57 被阅读13次

    模型之间的关系

    (1) 一对一

    实现: 使用models.OneToOneField来实现
    这个字段在哪个模型都可以(人, id卡)
    注意:
    使用OneToOne的模型

    1. 默认会随着绑定的模型的改变去改变, 绑定的数据删除, 它也会被删除
    2. 添加的数据主表的id只能在从表中出现一次,一一对应的关系
    3. 主表的数据可以添加多个(从表绑定这主表,所以从表一个只能出现一次)
    4. 如果删除从表的数据, 主表(被绑定的模型)数据不会有任何变化

    添加顺序表:

    • 先添加主表数据
    • 在添加从表
    • OneToOneField绑定的表为主表,本身表为从表
      绑定字段的on_delete属性:
    • models.CASCADE 为默认值, 主表数据删除, 从表跟随删除
    • models.PROTECT 保护模式, 主表数据有从表数据关联的时候, 主表不能删除
      id_persion = models.OneToOneField('Person', on_delete=models.PROTECT)
      
    • models.SET_NULL 设置null模式
      id_person = models.OneToOneField('Person',on_delete=models.SET_NULL,null=True)
      

    注意: 需要将库删除 重新生成迁移文件(因为表结构已经设置为不为null)

    (2) 一对多

    使用ForeignKey去创建一对多关系
    使用和一对一一样, 区别(从表可以添加多条数据)

    (3) 多对多

    使用ManyToManyField去创建多对多的关系
    1.使用在从表中(非用户表)
    2.在创建好模型 生成迁移文件的时候 会多生成一个外键表 来存储关联的id
    3.表中存储的是多对多的关系的数据
    4.添加关联数据的方法

    • buyer.goods_set.add(g) # 通过商品的小写模型名称_set.add(商品的对象)
    • 通过关联属性添加 g.从表的关联属性名.add(b)

    5.添加删除的方法

    • add()
    • clear() 清除关联数据(将关联表中指定的数据删除)

    6.俩个表都是独立的关系

    相关文章

      网友评论

          本文标题:(七) 模型之间的关系

          本文链接:https://www.haomeiwen.com/subject/xlnwqftx.html