Django Models一对多操作
特别注意:
新版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一对多操作相关推荐
- Django Model各种操作 Meta 常用字段 一对多操作 多对对操作 F Q查询 聚合函数
Model操作 meta源信息 class CLS(models.Model):username = models.CharField(max_length=32)class Meta:db_tabl ...
- 在python中创建虚拟环境和Django对数据库的操作(一)
一怼:横州侧畔千帆过,漏出你这个小瘪三,我劝天公重抖擞,劈死你这个王八蛋(by.阅后即瞎) 先说笔者所使用的版本,笔者使用的是django1.8.4的版本,不同版本可能有不同请按照实际情况处理,本文只 ...
- Django一对一 ,一对多,多对多
Django 数据库一对多,多对多 目录 app01/models.py app01/views.py app01/urls.py Python_Django/urls.py 目录 app01/mod ...
- Django中管理并发操作
上一篇我们说了,如何在Django中进行事务操作,数据的原子性操作 涉及了事务操作,我们不得不考虑的另一个问题就是:并发操作 还是那个用户转账的操作 我们使用事务操作解决的操作中途服务器宕机问题 但是 ...
- Django的model查询操作 与 查询性能优化
Django的model查询操作 与 查询性能优化 1 如何 在做ORM查询时 查看SQl的执行情况 (1) 最底层的 django.db.connection 在 django shell 中使用 ...
- Django models模型
Django models模型 一. 所谓Django models模型,是指的对数据库的抽象模型,models在英文中的意思是模型,模板的意思,在这里的意思是通过models,将数据库的借口抽象成p ...
- 00x: Django models.Model详解
Models model是对于信息的一种模型封装与定义.它包含了你要存储的必要字段和操作数据的方法.一句话概括就是,每个模型映射了一张数据表. 基本概念: 每个model都是继承于django.db. ...
- django models 之字段详解
数据库模型是django操作数据库的主要途径,也是django和数据库连接的主要方法,几乎所有对数据库的操作都是通过models来完成的,下面我们就简单介绍一下创建模型时会涉及到的字段类型, ...
- Django models Form model_form 关系及区别
Django models Form model_form 转载于:https://www.cnblogs.com/hellojesson/p/6234636.html
最新文章
- 为何高并发系统中都要使用消息队列
- 元宇宙大潮来袭?业内首个虚拟形象实时互动融合 SDK 来了!
- 使用有限状态机(FSM)解释shell 命令
- js调用高德API获取所在当前城市
- 数据结构——最小生成树之克鲁斯卡尔算法(Kruskal)
- springcloud gateway 源码解析、请求响应流程、第三方响应结果在 gateway 的经过
- dota英雄装备攻略,最全的英雄出装攻略介绍
- 网址在QQ微信被拦截怎么办?怎么样才能让被微信屏蔽的网址正常访问
- 安卓近距离通信--蓝牙通信开发
- 『WIN11』出现问题,你的PIN不可用,请重置PIN,无限循环解决
- 天正双击墙体不能编辑_【插件辅助下BIM正向设计】天正建筑 VS Revit
- win10下caffe环境搭建: win10 + vs2013 + caffe + CUDA 7.5 + cudnn v4 + Anaconda2 (python 2.7) 目前未使用GPU
- 政策重大升级、成立最强行业联盟,上海要做长三角区块链产业发展领头羊?...
- linux系统磁盘分区查看,linux下磁盘查看和分区
- 解决“yarn 无法加载文件 CUsersquberAppDataRoamingnpmyarn.ps1,因为在此系统上禁止运行脚本”问题
- MacBook 更改为Windows的按键布局
- java基于微信小程序的大学生个人家庭理财产品 uniapp小程序
- 数学会对计算机编程的关系
- 利用Chrom浏览器实现滚动截屏,不用下载插件,超级简单!
- 《第二行代码》—— 酷欧天气的开发
热门文章
- 2012年CS毕业生
- javascript入门 - 1
- 汇编语言int 13中断02h功能Demo - 使用emu8086
- VC++套接字、数据库、文件读写综合应用-客户端读取文件套接字接收服务端写入数据库
- 三句话回答C/C++面试题
- Maven安装与配置详解(Win10)
- Vue2.0 入门 安装Vue-cli
- bzoj3522 Hotel
- 常见的java异常——java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path...
- MySQL The password hash doesn't have the expected format.