python#django数据库一对一/一对多/多对多

一对一OneToOneField 用户和用户信息

搭建

# 一对一
class   TestUser(models.Model):
    username=models.CharField(max_length=32)
    password = models.CharField(max_length=32)

class TestInfo(models.Model):
    mick_name=models.CharField(max_length=32)
    user=models.OneToOneField(to=TestUser,on_delete=models.CASCADE()#on_delete 删除的模式 CASCADE 级联删除

让后执行数据库迁移命令

 

 同步数据库

1再执行python manage.py makemigrations

2再执行python manage.py migrate

插入用户

python .\manage.py shell

from user.models import TestUser,TestInfo

u=TestUser()   

u.username="张三"   

u.password="123"

u.save()

查询数据库刷新稍等 数据库插入完成

插入用户详情

ui.mick_name="阿三"
ui.user=u    
ui.save()

注意 数据库中有延迟 刷新数据库查看

注意 :nick_name 这里笔者创建为了mick_name

查询用户的详情 查询详情的用户名

有一对一字段就用字段查询 没有字段使用表名查询

#通过用户查询用户信息

>>> u=TestUser.objects.get(id=1)
>>> u.username
'张三'
>>> u.testinfo           #注意这里要小写为数据库中 数据库表名
<TestInfo: TestInfo object (1)>

>>> u.testinfo.mick_name
'阿三'

#通过用户信息查询用户名称

>>> ui=TestInfo.objects.get(id=1)
>>> ui.user.username
'张三'

一对多ForeignKey 学生和教室

搭建

class ClassRoom(models.Model):r_number=models.CharField(max_length=32)#教室门牌号# ForeignKey外键
class Student(models.Model):s_name=models.CharField(max_length=32)s_room=models.ForeignKey(to=ClassRoom,on_delete=models.CASCADE())#外键字段

 同步数据库

1再执行python manage.py makemigrations

2再执行python manage.py migrate

插入教室  插入学员

#进入命令行终端

python .\manage.py shell

>>> from user.models import Student,ClassRoom

#插入教室
>>> c=ClassRoom()
>>> c.r_number="1-2048"
>>> c.save()

#插入学员小明

>>> s=Student()
>>> s.s_name="小明"
>>> s.s_room=c
>>> s.save()

#插入学员小红

>>> s=Student()
>>> s.s_name="小红"
>>> s.s_room=c      
>>> c.save()        
>>> s.save()

#插入 二号教室 新增小花 将小花插入到二号教室

>>> c=ClassRoom()       
>>> c.r_number="1-2046"
>>> c.save

#查询到1号教室和2号教室

>>> c=ClassRoom.objects.get(id=1)  
>>> c1=ClassRoom.objects.get(id=2)
>>> s=Student()                    
>>> s.s_name="小花"                
>>> s.s_room=c1     
>>> s.save()

查询教室里所有的学员

有外键字段用外键字段 没有外键字段 表名小写_set

>>> c=ClassRoom()     

>>> c.student_set.all()
<QuerySet [<Student: Student object (1)>, <Student: Student object (2)>]>

#查询第一个用户 通过用户所在的教室查询用户所在教室编号

>>> s=Student.objects.get(id=1)
>>> s.s_room                    
<ClassRoom: ClassRoom object (1)>
>>> s.s_room.r_number
'1-2048'

student(学员表名小写)_set构成一表查询多表

查询学员对应的教室

多对多 ManyToManyField老师和教室 中间会有一个及链表

搭建

# 多对多# 班级
class ClassLevel(models.Model):c_name=models.CharField(max_length=32)# 老师
class Teacher(models.Model):t_name=models.CharField(max_length=32)t_class=models.ManyToManyField(to=ClassLevel)

 同步数据库

1再执行python manage.py makemigrations

2再执行python manage.py migrate

 

添加班级 添加老师

#添加班级

>>> from user.models import ClassLevel

>>> from user.models import Teacher

>>> c=ClassLevel()

>>> c.c_name="python_0831"

>>> c.save()

#添加老师老边

>>>t=Teacher()

>>>t.t_name="老边"

>>> t.save()

#将老师加入到班级python_0831
>>> t.t_class.add(c)
>>> t.save()

 

#添加老师龙文
>>> t=Teacher()
>>> t.t_name="龙文"
>>> t.save()

#将老师加入到班级python_0831
>>> t.t_class.add(c)
>>> t.save()

班级表

教室表

中间及链表

查询班级所有的认课老师

#查询第一个班级

>>> c=ClassLevel.objects.get(id=1)
>>> c
<ClassLevel: ClassLevel object (1)>

#获取班级人数
>>> c.teacher_set.all()
<QuerySet [<Teacher: Teacher object (1)>, <Teacher: Teacher object (2)>]>

#通过所有班级对象 循环遍历出老师姓名
>>> [t.t_name for t in c.teacher_set.all()]
['老边', '龙文']

查询老师带过的班级

>>> t=Teacher.objects.get(id=1)
>>> t.t_class.all()
<QuerySet [<ClassLevel: ClassLevel object (1)>]>
>>>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业计算机服务器中了locked勒索病毒怎么办,如何预防勒索病毒攻击

计算机服务器是企业的关键信息基础设备&#xff0c;随着计算机技术的不断发展&#xff0c;企业的计算机服务器也成为了众多勒索者的攻击目标&#xff0c;勒索病毒成为当下计算机服务器的主要攻击目标。近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的服务器被locked…

leaflet-uniapp 缩放地图的同时 显示当前缩放层级

记录实现过程&#xff1a; 需求为移动端用户在使用地图时&#xff0c;缩放地图的同时&#xff0c;可以获知地图此时缩放的级别。 效果图如下&#xff1a;此时缩放地图级别为13 map.on() 有对应的诸多行为 查看官网即可&#xff0c;这里根据需要为--zoomstart zoom zoomend 代…

Crowd-Robot Interaction 论文阅读

论文信息 题目&#xff1a;Crowd-Robot Interaction:Crowd-aware Robot Navigation with Attention-based Deep Reinforcement Learning 作者&#xff1a;Changan Chen, Y uejiang Liu 代码地址&#xff1a;https://github.com/vita-epfl/CrowdNav 来源&#xff1a;arXiv 时间…

【Linux】网络套接字知识点补足

目录 1 地址转换函数 1.1 字符串转in_addr的函数: 1.2 in_addr转字符串的函数: 1.3 关于inet_ntoa 2 TCP协议通讯流程 1 地址转换函数 本节只介绍基于IPv4的socket网络编程,sockaddr_in中的成员struct in_addr sin_addr表示32位 的IP 地址但是我们通常用点分十进制的字符串…

无涯教程-Perl - bind函数

描述 此功能将网络地址绑定到由SOCKET标识的文件句柄。地址应该是用于打开的Socket的适当类型的打包地址。 语法 以下是此函数的简单语法- bind SOCKET, ADDRESS 返回值 如果失败,此函数返回0,如果成功,则返回1。 Perl 中的 bind函数 - 无涯教程网无涯教程网提供描述此功能…

day52-Redis

Redis 1.Redis 1.1 RESP连接Redis 1.2 定义&#xff1a;是一个高性能的key-value数据库&#xff08;非关系型数据库&#xff09; 1.3 数据类型&#xff1a; key键的类型是字符串类型&#xff1b; 值的类型有五种&#xff1a;字符串String&#xff0c;哈希hash&#xff0…

pygame贪吃蛇游戏

pygame贪吃蛇游戏 贪吃蛇游戏通过enter键启动&#xff0c;贪吃蛇通过WSAD进行上下左右移动&#xff0c;每次在游戏区域中随机生成一个食物&#xff0c;每次吃完食物后&#xff0c;蛇变长并且获得积分&#xff1b;按空格键暂停。 贪吃蛇 import random, sys, time, pygame from …

AR远程专家指导在汽车改装上的应用有哪些?

随着科技的不断发展&#xff0c;AR增强现实技术逐渐走进了我们的生活。加上商贸国际化&#xff0c;远程协同纵深到制造生产的更多环节&#xff0c;研发协同、工艺优化等场景复杂、跨层级、需要频繁沟通确认的流程正通过AR应用实现全面远程化的过渡&#xff0c;在汽车行业&#…

JVM入门到精通

一、JVM概念 1.1、什么是JVM Java Virtual Machine&#xff1a;Java虚拟机&#xff0c;用来保证Java语言跨平台 Java虚拟机可以看做是一台抽象的计算机&#xff0c;如同真实的计算机那样&#xff0c;它有自己的指令集以及各种运行时内存区域 Java虚拟机与Java语言并没有必然…

【数据结构】常见的排序算法

常见的排序算法 常见的排序算法插入排序之直接插入排序时间复杂度特性总结 插入排序之希尔排序时间复杂度 选择排序之直接选择排序特性总结 选择排序之堆排序时间复杂度特性总结 交换排序之冒泡排序特性总结 交换排序之快速排序hoare版本挖坑法双指针法快速排序的优化1&#xf…

【Python基础教程】super()函数的正确使用方法

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 1.super(本身类名,self).方法名(参数)这样就可以调用父类的方法和参数了,super()内也可不加参数 2.规律是super是按调用的次序执行&#xff0c;super后面的语句是逆向执行的。 有2段示例代码&#xff0c;不同的在于value有没…

NB-IOT 和蜂窝通信(2/3/4/5G)的区别和特点是什么?

NB-IOT 和蜂窝通信(2/3/4/5G)的区别和特点是什么? 参考链接:https://www.sohu.com/a/221664826_472880 NB IOT是窄带物联网技术,主要解决的是低速率数据传输,可使用GSM900或DCS1800频段,在频段使用上比较灵活,可以和GSM,UMTS或LTE共存,具备优异的MCL(最小耦合损耗…

Vue3 条件渲染简单应用

去官网学习-》条件渲染 | Vue.js 运行示例&#xff1a; 代码&#xff1a;HelloWorld.vue <template><div class"hello"><h1>Vue 条件渲染</h1><h2 v-if"flag">true显示内容</h2><h2 v-if"flag2">fal…

我的创作5周年纪念日

机缘 CSDN在 SEO 方面做得很好。所以容易接触到。 然后就尝试使用了。没想到已经5年了。 收获 写blog其实是对知识的总结&#xff0c;能让自己更好的分享交流&#xff0c;让自己能和其他技术者一起交流迭代&#xff0c;并且把技术内容不断做好&#xff0c;让更多人通过技术…

【周末闲谈】“深度学习”,人工智能也要学习?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一言&#xff0c;模仿还是超越&#xff1f; ✨第二周 畅想AR 文章目录 系列目录前言机器学习深度学习深度学习的三在种方法深度学习讲解…

据说这是最详细的,HttpRunner接口自动化框架讲解,直接上高速...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 框架简介 HttpRu…

Golang之路---02 基础语法——函数

函数 由于Golang语言是编译型语言&#xff0c;所以函数编写的顺序是无关紧要的&#xff0c;它不像 Python 那样&#xff0c;函数在位置上需要定义在调用之前。 函数定义 func function_name( [parameter list] ) [return_types] {函数体 }参数解释&#xff1a; func&#x…

Java实现数字加密

Java实现数字加密 需求分析代码实现小结Time 需求分析 1.首先&#xff0c;考虑方法是否需要接收数据处理&#xff1f; 需要一个4位数&#xff0c;至于是哪一个数&#xff0c;让方法的调用者传递。 所以&#xff0c;方法的参数&#xff0c;就是这个需要加密的四位数 2.接着&…

webpack基础知识三:说说webpack中常见的Loader?解决了什么问题?

一、是什么 loader 用于对模块的"源代码"进行转换&#xff0c;在 import 或"加载"模块时预处理文件 webpack做的事情&#xff0c;仅仅是分析出各种模块的依赖关系&#xff0c;然后形成资源列表&#xff0c;最终打包生成到指定的文件中。如下图所示&#…

转运相关的征兆,大家可以来看看

转运是一种喜讯&#xff0c;意味着运势将逐渐好转&#xff0c;人生会迎来一系列积极的变化。 虽然没有确切的科学根据可以证明转运的存在&#xff0c; 但是在许多传统文化和民俗中&#xff0c;人们都相信转运的征兆是实实在在的。 虽然无法确保这些征兆会在每种情况下都适用&am…