Django多表关联

一对一关联关系

  • 使用方法
数据库体现 Django程序模型
通过外键关联,外键要设置在多的一方 OneToOneField()
   #在 models 文件里设置 class 属性 OneToOneField 
   #关联属性要设置在后边的类里,不然会报错。因为程序是按顺序执行的。
   #一般关联属性直接设置为前者类名,关系设定后直接调用对应的类名即可

   class Boy(models.Model):  
        .....  

   class Girl(models.Model):
        ......
        boy=models.OneToOneField(Boy,null=True,blank=True)
        #根据实际选择是否为空(null=True,blank=True),允许为空的话添加对象时可以先没有关联对象;
        #关联属性如果不为空,添加对象时必须把关联对象一并添加,否则无法创建对象。

  • 注意事项
    • 如果前期双方没有关联,后期添加对关联属性时,应都通过后一个class(设置有一对一关系属性的类)添加,不然无法添加关联属性
    # 如:Girl类里设置有Boy属性。在选择关联属性配偶保存时,女选男用:
    girl.boy=boy    
    girl.save()   
    # 当男选女时一样用女类来保存关联属性男,使双方关联。

一对多关联关系

  • 使用方法
    • eg:一个人可以有多个手机号,但一个手机号只能属于一个人
数据库体现 Django程序模型
通过外键关联,外键设置在多的一方 models.ForeignKey()
中间表关联,多的一方要设置唯一约束 primary key() 也是主键
  • 注意及小方法
    • 手机号一定属于一个人,不能为空
    • 创建属性时多的一方要有对应类的一个对象
    • 查找一个对象关联对象的 所有
      • models.User.objects.say_set.all

多对多关联关系

  • 使用方法
    • eg:老师和学生的关系~一个老师有多个学生,一个人学生有多个老师
数据库体现 Django程序模型
中间表关联 models.ManyToManyField()
  • 注意
    • 多对多的关系一般都会虚拟一个中间项,拆分为多个一对多的关系
      • eg~用户和商品之间的关系(一个用户可以买多个商品,一件商品被多个用户购买),这个时候就会虚拟一个购物车(虚拟中间项),拆分为多个一对多的关系.

附加

  • 网站不同用户不同菜单实现
    • 定义Type类型, User类型(一对多Type), Menu类型(一对多Type)
    • Type有两个对象~用户和管理员
    • Menu类型~不同的Type类型可以读取不同的菜单列表
    • User 通过与 type 的关联实现不同用户的不同类型 menu
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 一对一关联关系 使用方法数据库体现Django程序模型通过外键关联,外键要设在多的一方OneToOneFie...
    依旧丶森阅读 2,487评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,196评论 6 13
  • 原本只想收获一枚秋果,他却给了我们整个秋天。 2017年9月4日 星期一 晴 打开忧喜交集的高三日记,总能准确...
    见伊阅读 900评论 88 62
  • 每个青春期的少年,应该都觉得有个属于自己的国度吧。 在那里, 自己有时候是君主,有时候是战士,有时候只是臣民。 不...
    LilyG写字的地方阅读 304评论 0 0