django模型系统(三)
1,自定义主键字段的创建
AutoFiled(pirmary_key=True) # 一般不会自定义
2,order_by asc desc
表关系
OneToOne
student = models.OneToOneField('Student' , on_delete=models.CASCADE) #一对一的核心代码
(mysite) pyvip@VIP:~/python34/mysite$ python manage.py makemigrations #根目录下运行
(mysite) pyvip@VIP:~/python34/mysite$ python manage.py migrate
(py3env) pyvip@VIP:~$ mysql -A mysite -uroot -pqwe123 #进入数据库
OneToMany
grade = models.ForeignKey('Grade', on_delete=models.SET_NULL, null=True) #一对多核心代码

ManyToMany
2,关联表的数据操作
OneToMany
正向 :一个模型如果定义了一个外键字段,通过这个模型操作外键
删除必须有null
增删改查


In [29]: g3 = Grade.objects.create(name='进阶', num='40期')
In [30]: g3.student_set.create(name='李鹏辉')
Out[30]: <Student: 李鹏辉-0>
In [31]: g3.student_set.add(s) add立刻马上执行,不用操作数据库

有clear方法先执行clear再添加,如果clear没有就直接添加
只要是返现就模型的小写加上s-set
Many-to-Many
*****指定了中间表,add, remove, set 都不能用,必须用中间表
正向:
In [78]: c1.students.all()
Out[78]: <QuerySet [<Student: 心蓝-0>, <Student: 心蓝-0>, <Student: 李鹏辉-0>]>
反向:
In [79]: s1.course_set.all()
Out[79]: <QuerySet [<Course: python全栈>, <Course: java>, <Course: python全栈>]>
One—to—One
In [85]: sd = StudentDetail.objects.create(num='2019020001', college='家里蹲', student=s1)
In [86]: sd
Out[86]: <StudentDetail: StudentDetail object (1)>
In [87]: sd.student
Out[87]: <Student: 心蓝-0>
In [88]: sd.student.name
Out[88]: '心蓝'
In [89]: sd.student.age
Out[89]: 0
In [90]: s1.studentdetail
Out[90]: <StudentDetail: StudentDetail object (1)>
In [91]: s1.studentdetail.num
Out[91]: '2019020001'
In [92]: s1.studentdetail.college
Out[92]: '家里蹲'
跨表查询
In [93]: res = Course.objects.filter(students__sex=1)
In [94]: print(res.query)
SELECT `teacher_course`.`id`, `teacher_course`.`name` FROM `teacher_course` INNER JOIN `teacher_enroll` ON (`teacher_course`.`id` = `teacher_enroll`.`course_id`) INNER JOIN `teacher_student` ON (`teacher_enroll`.`student_id` = `teacher_student`.`id`) WHERE `teacher_student`.`sex` = 1
In [95]: res = Student.objects.filter(course__name__contain='python')
In [96]: print(res.query)
SELECT `teacher_student`.`id`, `teacher_student`.`name`, `teacher_student`.`age`, `teacher_student`.`sex`, `teacher_student`.`qq`, `teacher_student`.`phone`, `teacher_student`.`grade_id`, `teacher_student`.`c_time`, `teacher_student`.`e_tine` FROM `teacher_student` INNER JOIN `teacher_enroll` ON (`teacher_student`.`id` = `teacher_enroll`.`student_id`) INNER JOIN `teacher_course` ON (`teacher_enroll`.`course_id` = `teacher_course`.`id`) WHERE `teacher_course`.`name` LIKE BINARY %python%
In [99]: res = Student.objects.filter(course__name__contains='english',grade__num__contains='33')
In [100]: print(res.query)
SELECT `teacher_student`.`id`, `teacher_student`.`name`, `teacher_student`.`age`, `teacher_student`.`sex`, `teacher_student`.`qq`, `teacher_student`.`phone`, `teacher_student`.`grade_id`, `teacher_student`.`c_time`, `teacher_student`.`e_tine` FROM `teacher_student` INNER JOIN `teacher_enroll` ON (`teacher_student`.`id` = `teacher_enroll`.`student_id`) INNER JOIN `teacher_course` ON (`teacher_enroll`.`course_id` = `teacher_course`.`id`) INNER JOIN `teacher_grade` ON (`teacher_student`.`grade_id` = `teacher_grade`.`id`) WHERE (`teacher_course`.`name` LIKE BINARY %english% AND `teacher_grade`.`num` LIKE BINARY %33%)
In [101]: res = Student.objects.filter(enroll__pay__lt=3000)
In [102]: print(res.query)
SELECT `teacher_student`.`id`, `teacher_student`.`name`, `teacher_student`.`age`, `teacher_student`.`sex`, `teacher_student`.`qq`, `teacher_student`.`phone`, `teacher_student`.`grade_id`, `teacher_student`.`c_time`, `teacher_student`.`e_tine` FROM `teacher_student` INNER JOIN `teacher_enroll` ON (`teacher_student`.`id` = `teacher_enroll`.`student_id`) WHERE `teacher_enroll`.`pay` < 3000.0
In [103]: res = Grade.objects.filter(student__course__name__contains='python')
In [104]: print(res.query)
SELECT `teacher_grade`.`id`, `teacher_grade`.`name`, `teacher_grade`.`num` FROM `teacher_grade` INNER JOIN `teacher_student` ON (`teacher_grade`.`id` = `teacher_student`.`grade_id`) INNER JOIN `teacher_enroll` ON (`teacher_student`.`id` = `teacher_enroll`.`student_id`) INNER JOIN `teacher_course` ON (`teacher_enroll`.`course_id` = `teacher_course`.`id`) WHERE `teacher_course`.`name` LIKE BINARY %python%
django模型系统(三)的更多相关文章
- django模型系统(二)
django模型系统(二) 常用查询 每一个django模型类,都有一个默认的管理器,objects QuerySet表示数据库中对象的列表.他可以有0到国歌过滤器.过滤器通过给定参数,缩小查询范围( ...
- django模型系统(一)
django模型系统(一) djangode ORM ORM:对像关系映射 用python概念去表达数据库 数据库配置(mysql) 安装pumysql 修改项目目录下的__init__.py imp ...
- Django模型系统——ORM校园管理系统代码
1.models.py from django.db import models # Create your models here. class Class(models.Model): id = ...
- 八.django模型系统(二)之常用查询及表关系的实现
Ⅰ.常用查询 1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...
- django模型系统二
常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. ...
- 【Mac系统 + Python + Django】之开发一个发布会系统【Django模型(三)】
上一部分给大家介绍Django的视图. 接下来继续来了解Django框架,来看第三部分,此部分是对数据库的操作. 目录: 一.设计系统表 二.admin后台管理 三.基本数据访问(SQLite数据库) ...
- 七.django模型系统(一)
Ⅰ.django的ORM 1.含义 对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语 ...
- python的Web框架,Django模型系统二,模型属性,及数据库进阶查询
原始数据接上篇文章来操作.可能需要查看后才能懂.点击这里查看 1.常用的模型字段类型 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fie ...
- Django 模型系统(model)&ORM--基础
ORM 映射关系: 类 ---> 表 属性 ---> 字段 对象 --->一条数据 创建表(建立模型) 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作 ...
随机推荐
- STL 小白学习(2) string
#include <iostream> using namespace std; #include <string> //初始化操作 void test01() { //初始化 ...
- 【ANT】输入中文格式为乱码
使用ant编译,打出的日志的格式为乱码,加上下面的指定编码后,输出为中文了. 为方便拷贝,将其贴出来 <jvmarg value="-Dfile.encoding=UTF-8" ...
- 【阅读笔记】《C程序员 从校园到职场》第六章 配置文件,makefile 文件 (Part 2)
Contents: 1.配置文件(通常以 ini 结尾) 2.makefile文件 (Linux) PS: 这篇文章的内容,不太理解. 一.配置文件 本文以一个实际的小软件为例,介绍了C语言中配置文 ...
- reduction_indices in tensorflow
https://www.cnblogs.com/likethanlove/p/6547405.html
- 《JavaScript Dom 编程艺术》读书笔记-第5章
上一篇随笔中记录了用JavaScript建一个基础图片库,但实际上还有很多地方可以改进.第五章将逐步进行改进,这一章里需要明白的道理是达到目标的过程和达到目标同样重要~ 第五章:最佳实践 5.1 过去 ...
- css.1
background-repeat背景平铺background-x水平平铺 background-y垂直平铺 background:url()no-repeat;不平铺 background-size ...
- pandas 将excel一列拆分成多列重新保存
利用pd.read_excel 做到将第二列“EVT-LBL”按“-”分割后重新加三列在df后面 1 读取表格df 2. 分割第二列短横连接的数字,保存到df2---- 参考:str.spilt( ...
- ChIP-seq motif ROC 相关资料
[怪毛匠子]独家整理 不可以转载 MEME工具 http://meme-suite.org DNA motif 搜索算法总结 http://www.bbioo.com/lifesciences/40- ...
- MVVM设计模式加RAC响应式编程
一:为什么要用MVVM? 为什么要用MVVM?只是因为它不会让我时常懵逼. 每次做完项目过后,都会被自己庞大的ViewController代码吓坏,不管是什么网络请求.networking data ...
- webpack 3.X研究
目前webpack已经到了3.X版本,为了方便通过最新版本打包整个前端应用,现在开始对webpack操作进行简单介绍. 一.webpack安装 在安装webpack之前需要注意,webpack是通过n ...