几对几的模型结构的使用场景为:一般根据业务需求,同一业务,需要向相关联的多表插入删除数据时,会用到。

一对一:

创建一个用户表

class Users(models.Model):

  username = models.CharField(max_length=20,null=true,blank=true)

  class Meta:

    db_table='users'

创建一个用户详情表

  #在用户详情表中,关联用户表,让两个表的数据产生联系

  #第一个参数,是被关联的模型名称

  #第二个参数:当user用户表中的一条数据被删除时候,与之对应的详情表数据也会被删除

class UserInfo(models.Model):

  uid = models.OneToOneField(Users,on_delete=models.CASCADE)

  address = models.CharField(max_length=100,null=True)

  class Meta:

    db_table='userinfo'

生成迁移文件 :python3 manage.py makemigrations

执行迁移文件:python3 manage.py migrate

此时一对一的表创建完成,下面进行操作:

添加数据:向user表中添加一条,同时也会向userinfo相对应的添加一条数据

  data = {'name':'ss','age':23}
  ob = models.User(**data)
  ob.save()
  obl = models.UserInfo()
  obl.address='ts'
  obl.uid=ob
  obl.save()
  return HttpResponse('一对一')

查询数据:

查询user表数据:

ob = models.User.objects.get(id=11)

根据从表的外键查询主表的数据:
    1、先找到从表的该条数据

      ui = models.User.objects.first()

    2、根据从表的外键拿到主表的信息,格式:  ui.从表外键.主表想得到的信息

      print(ui.uid.name)  #取到对应的主表信息

根据主表的主键查询从表的数据:

    1、先找到主表的该条数据

    u = models.User.objects.first()

    2、根据主表对象拿到从表的信息 ,格式: u.从表.从表想得到的信息

    print(u.UserInfo.address)

Django 一对一,一对多,多对多 操作、常用方法的更多相关文章

  1. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  2. JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用

    下面把项目中的用户类中有个:一对一  一对多  多对多的注解对应关系列取出来用于学习      说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...

  3. mybatis 一对一 一对多 多对多

    一对一 一对多 多对多

  4. day 69-70 一对一 一对多 多对一联表查询

    day 69 orm操作之表关系,多对多,多对一 多对一/一对多, 多对多{类中的定义方法} day69 1. 昨日内容回顾 1. 单表增删改查 2. 单表查询API 返回QuerySet对象的: 1 ...

  5. 使用NHibernate(7)-- 一对一 && 一对多 && 多对多

    1, 一对一. 对于数据量比较大的时候,考虑查询的性能,肯能会把一个对象的属性分到两个表中存放:比如用户和用户资料,经常使用的一般是Id和用户名,用户资料(学校,籍贯等)是不经常被查询的,所以就会分成 ...

  6. JPA 一对一 一对多 多对一 多对多配置

    1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...

  7. DjangoORM一对多&多对多操作

    简要说明 通过操作对象的方式操作数据库 详细步骤 models.py的结构是: 如果models.py中外键定义没有写 related_name='student_teacher', 可以直接用 st ...

  8. Django一对多,多对多操作

    简要说明 Django里面的数据库操作O2O&M2M,一般归属于models管理 使用场景 一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了).//两个表的 ...

  9. Django ORM 一对一,一对多,多对多, 添加,批量插入和查询

    模型类 class Book(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_ ...

  10. 初学者易上手的SSH-hibernate04 一对一 一对多 多对多

    这章我们就来学习下hibernate的关系关联,即一对一(one-to-one),一对多(one-to-many),多对多(many-to-many).这章也将是hibernate的最后一章了,用于初 ...

随机推荐

  1. OpenGL教程和书籍

    1.http://goanna.cs.rmit.edu.au/~gl/teaching/Interactive3D/

  2. NumPy 广播机制(Broadcasting)

    一.何为广播机制 a.广播机制是Numpy(开源数值计算工具,用于处理大型矩阵)里一种向量化数组操作方法. b.Numpy的通用函数(Universal functions) 中要求输入的两个数组sh ...

  3. 20165336 2017-2018-2《Java程序设计》第6周学习总结

    20165336 2017-2018-2<Java程序设计>第6周学习总结 教材学习内容总结 常量池中的数据在程序运行期间再也不允许改变. String s = new String(&q ...

  4. python接口测试实例--数据驱动(程序与数据分离)

    #encoding=utf-8import requestsimport jsonimport osimport hashlibimport picklefrom conf import * stat ...

  5. linux测试环境搭建步骤

    一.建用户 1.新建用户root用户登录,执行命令:useradd + 用户名 -m -d + 指定路径如:新建用户liuwq ,指定路径/home/ios命令:useradd liuwq -m -d ...

  6. java 集合(三)List接口

    package cn.sasa.demo1; import java.util.ArrayList; import java.util.LinkedList; import java.util.Lis ...

  7. what's the python之内置函数

    what's the 内置函数? 内置函数,内置函数就是python本身定义好的,我们直接拿来就可以用的函数.(python中一共有68中内置函数.)     Built-in Functions   ...

  8. 算法 -- 求最长公共字符串&PHP

    https://blog.csdn.net/hongyuancao/article/details/83308093 本文是利用PHP,求最长公共字符串.思路:利用动态规划和矩阵的思想. 动态规划:就 ...

  9. Linux查看某个端口使用情况并kill

    Linux查看某个端口使用情况并kill 例如查看8083端口的状态: netstat -apn | grep 8083 tcp 0 0 192.168.2.17:8083 0.0.0.0:* LIS ...

  10. 由ngx.say和ngx.print差异引发的血案

    Jan 16, 2018openresty点击 最近上线一个项目,利用openresty在前面做反向代理,部分地址通过lua的http请求后端接口进行返回,在线下测试都没问题,公司预发灰度测试都通过了 ...