特别注意:

新版django新建ForeignKey时需要添加 on_delete=models.CASCADE,即

models.ForeignKey("UserType",on_delete=models.CASCADE)

一,新建models文件
class UserInfo(models.Model):    name = models.CharField(max_length=10)    password = models.CharField(max_length=100)    user_type = models.ForeignKey("UserType",on_delete=models.CASCADE)

class UserType(models.Model):    id = models.AutoField(primary_key=True)    caption = models.CharField(max_length=10)

二,在views下添加数据1.使用create添加数据
models.UserType.objects.create(caption="管理员")

2.使用对象管理添加数据  2.1
    obj = models.UserType()    obj.caption = "超级管理员"    obj.save()  2.2    obj1 = models.UserType(caption="普通用户")    obj1.save()

3.使用字典方式添加数据
  user_type_dict = {"caption":"打杂的"}  models.UserType.objects.create(**user_type_dict)

  user_info_dict1 = {"name":"n1","password":"123","user_type":models.UserType.objects.get(caption="管理员")}  models.UserInfo.objects.create(**user_info_dict1)

  user_info_dict2 = {"name": "n2", "password": "123", "user_type": models.UserType.objects.get(caption="超级管理员")}  models.UserInfo.objects.create(**user_info_dict2)

  user_info_dict3 = {"name": "n3", "password": "123", "user_type": models.UserType.objects.get(caption="普通用户")}  models.UserInfo.objects.create(**user_info_dict3)

三,models正向查找

  1.通过外键查找其他表数据      obj = models.UserInfo.objects.filter(name="n1").first()      print(obj.user_type.caption)      通过UserInfo表查找UserType表的caption列的数据,使用外键user_type

  2.通过牛逼的双下划线__正向连表操作      obj = models.UserInfo.objects.filter(name="n1",user_type__caption="管理员").values("name","user_type__caption")      print(obj.all().first().get("name"))      通过filter过滤条件,通过外键__其他表的属性来操作其他表,这与第一种操作方式(三【1】)的区别是:      这是对 对象来进行操作,而之前都是通过对某一行具体的数据进行操作      values方法表示新数据有哪些列,values会生成一个字典,还有一个values_list,会生成一个元组

四,models反向查找

  1.通过_set反向查找      obj = models.UserType.objects.filter(caption="管理员").first()      print(obj.userinfo_set.all().first().password)      反向查找时时通过其他表的表名加_set进行列的选取,而正向查找时时通过外键,除此之外,userinfo_set生成的是一个特殊对象djangoapp.UserInfo.None,            特别注意:通过_set进行反向查找时,必须要使用表名,而不是类名,即:有大小写区分
  2.通过牛逼的双下划线__反向连表操作      obj = models.UserType.objects.filter(caption="管理员").values("caption","userinfo__name")      print(obj)      通过caption进行filter,在显示值的时候,使用了表名+__列名来进行反向连表操作

总结:在使用连表操作时(即:要展示多个表的数据时),都使用__来进行表之间的属性调用,正向查找使用外键,反向查找使用表名

   在表1调用表2的数据时,正向查找使用外键.属性,反向查找使用表名_set

补充:  一对一连表操作时一对多连表操作的衍化

  1.使用外键一对一      外键与外键关联的列使用唯一索引,即:unique=True,这样两张表就一对一了

  2.使用models.OneToOneField创建一对一关系,原理就是1


转载于:https://www.cnblogs.com/binpeng/p/8947888.html

Django Models一对多操作相关推荐

  1. Django Model各种操作 Meta 常用字段 一对多操作 多对对操作 F Q查询 聚合函数

    Model操作 meta源信息 class CLS(models.Model):username = models.CharField(max_length=32)class Meta:db_tabl ...

  2. 在python中创建虚拟环境和Django对数据库的操作(一)

    一怼:横州侧畔千帆过,漏出你这个小瘪三,我劝天公重抖擞,劈死你这个王八蛋(by.阅后即瞎) 先说笔者所使用的版本,笔者使用的是django1.8.4的版本,不同版本可能有不同请按照实际情况处理,本文只 ...

  3. Django一对一 ,一对多,多对多

    Django 数据库一对多,多对多 目录 app01/models.py app01/views.py app01/urls.py Python_Django/urls.py 目录 app01/mod ...

  4. Django中管理并发操作

    上一篇我们说了,如何在Django中进行事务操作,数据的原子性操作 涉及了事务操作,我们不得不考虑的另一个问题就是:并发操作 还是那个用户转账的操作 我们使用事务操作解决的操作中途服务器宕机问题 但是 ...

  5. Django的model查询操作 与 查询性能优化

    Django的model查询操作 与 查询性能优化 1 如何 在做ORM查询时 查看SQl的执行情况 (1) 最底层的 django.db.connection 在 django shell 中使用 ...

  6. Django models模型

    Django models模型 一. 所谓Django models模型,是指的对数据库的抽象模型,models在英文中的意思是模型,模板的意思,在这里的意思是通过models,将数据库的借口抽象成p ...

  7. 00x: Django models.Model详解

    Models model是对于信息的一种模型封装与定义.它包含了你要存储的必要字段和操作数据的方法.一句话概括就是,每个模型映射了一张数据表. 基本概念: 每个model都是继承于django.db. ...

  8. django models 之字段详解

         数据库模型是django操作数据库的主要途径,也是django和数据库连接的主要方法,几乎所有对数据库的操作都是通过models来完成的,下面我们就简单介绍一下创建模型时会涉及到的字段类型, ...

  9. Django models Form model_form 关系及区别

    Django models Form model_form 转载于:https://www.cnblogs.com/hellojesson/p/6234636.html

最新文章

  1. 为何高并发系统中都要使用消息队列
  2. 元宇宙大潮来袭?业内首个虚拟形象实时互动融合 SDK 来了!
  3. 使用有限状态机(FSM)解释shell 命令
  4. js调用高德API获取所在当前城市
  5. 数据结构——最小生成树之克鲁斯卡尔算法(Kruskal)
  6. springcloud gateway 源码解析、请求响应流程、第三方响应结果在 gateway 的经过
  7. dota英雄装备攻略,最全的英雄出装攻略介绍
  8. 网址在QQ微信被拦截怎么办?怎么样才能让被微信屏蔽的网址正常访问
  9. 安卓近距离通信--蓝牙通信开发
  10. 『WIN11』出现问题,你的PIN不可用,请重置PIN,无限循环解决
  11. 天正双击墙体不能编辑_【插件辅助下BIM正向设计】天正建筑 VS Revit
  12. win10下caffe环境搭建: win10 + vs2013 + caffe + CUDA 7.5 + cudnn v4 + Anaconda2 (python 2.7) 目前未使用GPU
  13. 政策重大升级、成立最强行业联盟,上海要做长三角区块链产业发展领头羊?...
  14. linux系统磁盘分区查看,linux下磁盘查看和分区
  15. 解决“yarn 无法加载文件 CUsersquberAppDataRoamingnpmyarn.ps1,因为在此系统上禁止运行脚本”问题
  16. MacBook 更改为Windows的按键布局
  17. java基于微信小程序的大学生个人家庭理财产品 uniapp小程序
  18. 数学会对计算机编程的关系
  19. 利用Chrom浏览器实现滚动截屏,不用下载插件,超级简单!
  20. 《第二行代码》—— 酷欧天气的开发

热门文章

  1. 2012年CS毕业生
  2. javascript入门 - 1
  3. 汇编语言int 13中断02h功能Demo - 使用emu8086
  4. VC++套接字、数据库、文件读写综合应用-客户端读取文件套接字接收服务端写入数据库
  5. 三句话回答C/C++面试题
  6. Maven安装与配置详解(Win10)
  7. Vue2.0 入门 安装Vue-cli
  8. bzoj3522 Hotel
  9. 常见的java异常——java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path...
  10. MySQL The password hash doesn't have the expected format.