一、关系表的数据操作

关系表中的数据操作

查看数据库中的表结构

一对多表关系数据的添加:

1. 第一种方式就是跟之前一样,用传参的方法添加,需要注意的是外键的值必须是关联表中已存在的值;

2. 第二种方式是用的属性赋值方式,因为我们在模型类有定义了一个department的属性,而这个属性的对象类型必须是department表的类实例对象。

from django.http import HttpResponse
from .models import Department, Student, Stu_detail, Course def test(request):
# 往department表里面插入数据
d1 = Department(d_name='文学院')
d1.save()
# 往student数据表里插入数据
s1 = Student(s_name='凯西', dept_id=1)
s1.save()
s2 = Student(s_name='小红')
s2.dept =d1
s2.save() return HttpResponse('xxxx')

二、表关联对象的访问

Student的模型类中我们有定义department属性,所以当我们去访问的时候,可以直接通过student.department的形式1去找到某个学生的所属学院是哪个。那么如果我们也希望在访问某个学院的实现对象的学生的时候,改怎么访问呢?

如果模型1有一个ForeignKey,那么该ForeigKey所指的模型2实例可以通过一个管理器回前面有ForeigKey的模型1的所有实例。默认情况下,这个管理器的名字为foo_set,其中foo是源模型的小写名称。

可以在定义时设置related_name参数来覆盖foo_setd 名称。

处理关联对象的一些方法:

add(obj1, obj2, ...)添加的已经存在数据库的数据,添加一指定的模型对象到关联的对象集中。

1. d1.student的管理器有add的方法;

2. 例子中的s2能添加成功是因为设置了student表中department字段允许为空了。

三、多表查询

Django提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理JOIN。若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段:

# 查询学院名字为“计算机学院”的学生的信息

Student.objects.filter(department__d_name='计算机学院')

它还可以反向工作。若要引用一个“反向”的关系,只需要使用该模型的小写的名称。

# 查询学生名字中包含“小”的学生的学院信息

Department.objects.filter(student__s_name__contains='小')

1008.Django模型基础03的更多相关文章

  1. Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)

    Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...

  2. Django 07 Django模型基础2 (常用查询和多表关联)

    Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...

  3. Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)

    Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...

  4. 六、Django模型基础第一节

    1 数据库的连接配置 django 连接mysql的配置流程: 安装 pymysql pip install pymysql 创建数据库用户 '; grant all on *.* to 'xiang ...

  5. Django 学习第六天——Django模型基础第一节

    一.Django 的 ORM 简介: Django的ORM系统的分析: 1.ORM 概念:对象关系映射(Object Relational Mapping,简称ORM) 2.ORM的优势:不用直接编写 ...

  6. 九.django模型基础(三)之关联对象操作及多表查询

    Ⅰ.关系表的数据操作 1.正向 正向:如果一个模型有外键字段,通过这个模型对外键进行操作叫做正向. 1)更新(增) a.通过属性复制 b.通过主键的方式 总结: ForeignKey 字段的更新,跟普 ...

  7. 七、Django模型基础第二节——常用查询

    1 常用的模型字段类型 官方文档链接: https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 常用的字段类型 模型字 ...

  8. django模型基础(三)

    本文转载自https://blog.csdn.net/xiaogeldx/article/details/88084034 表关系 一对一(OneToOne) 通过本表的主键外键关联另一张表的主键 创 ...

  9. Django 学习第八天——Django模型基础第三节

    一.表关系的实现: 一对一:OneToOne(外键+唯一键) xxx = models.OneToOneField('关联的表',on_delete=models.CASCADE) 外键和一对一关系的 ...

  10. Django 学习第七天——Django模型基础第二节

    User 是自己创建的模型类,等于数据库中的表 常用的查询方法: all():获取所有数据: User.objects.all() first():获取第一条数据: User.objects.firs ...

随机推荐

  1. Linux 释放内存及占用较高问题排查

    1. 查看内存情况 #按 k 查看 free #按兆M查看 free -m total:总计物理内存的大小. used:已使用多大. free:可用有多少. Shared:多个进程共享的内存总额. B ...

  2. body传参和query传参

    get请求只能传query参数,query参数都是拼接在请求地址上的.post可以传body和query两种形式的参数. get请求在url中传送的参数是有长度限制的,而post没有限制.get比po ...

  3. 统计 nginx access.log

    awk '{print $1}' access22.log | sort | uniq -c | sort -nr -k1

  4. Chrome 中的 JavaScript 断点设置和调试技巧--转自hanguokai.com

    你是怎么调试 JavaScript 程序的?最原始的方法是用 alert() 在页面上打印内容,稍微改进一点的方法是用 console.log() 在 JavaScript 控制台上输出内容.嗯~,用 ...

  5. Java设计模式之策略模式(13)

    策略模式定义了一系列算法,每个算法封装起来,他们可以相互替换,且算法的变化不会影响到使用算法的客户.可以设计一个抽象类提供辅助. package WHP; public interface ICalc ...

  6. ASP.NET Core连接字符串中的特殊字符如何处理?多实例如何连接?

    ASP.NET Core连接字符串中的特殊字符,如数据库密码,有时会有特殊字符,如password&1234, 如何直接使用会报连接错误,只需用单引号阔起来即可,如下'password& ...

  7. Docker之RabbitMQ保姆级别安装

    Docker之RabbitMQ保姆级别安装: 如果觉得样式不好:跳转即可 http://www.lifengying.site/(md文件复制过来有些样式会不一样) 学英语网站项目:自己先保证Redi ...

  8. 杭电oj 数值统计

    Problem Description 统计给定的n个数中,负数.零和正数的个数.   Input 输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然 ...

  9. Mac如何用鼠标快速锁屏

    锁屏谁不会啊?本来写这篇文章,感觉自己太多余,但用鼠标直接锁屏就有点小意思,Mac对于很多人来说非常模式,通常是商务.设计这类人事在使用,对于新手而言,它的功能过于隐藏,那么Mac要如何达到快速锁屏呢 ...

  10. Spring RMI 介绍

    Spring RMI RMI全称是Remote Method Invocation-远程方法调用,是纯Java的网络分布式应用系统的核心解决方案之一.Java RMI 支持存储于不同地址空间的程序级对 ...