模型关系 关系数据库的威力体现在表之间的相互关联,Django提供了三种最常见的数据库关系:多对一 (many-to-one),多对多(many-to-many),一对一(one-to-one)...多对一关系 多对多关系 一对一关系 多对一 django是使用django.db.models.ForeignKey 定义多对一关系 ForeignKey需要一个位置参数来指定本Model关联的Model...正向查询( ForeignKey 所在的模型查询关联的模型) car = Car.objects.get(pk=2) car.manufacturer #返回一条Manufacturer 对象 反向查询...( ForeignKey 指向的模型查询ForeignKey 所在的模型) 如果模型有一个ForeignKey,那么该ForeignKey 所指的模型实例可以通过一个管理器返回前一个有ForeignKey...如果不仅仅需要知道两个Model之间是多对多的关系,还需要知道这个关系的更多信息,比如Person和Group是多对多的关系,每个person可以在多个group里,那么group里可以有多个person
大家好,又见面了,我是你们的朋友全栈君。 多表查询—跨关联关系的查询 Django 提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理JOIN。...若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段: 上实战训练——更直观理解: (得到的都是QuerySet型数据!)...from django.http import HttpResponse from .models import Department, Student, Course, Stu_detail def...add_user(request): # 1.查询学院名为‘北大’的学生的信息 (注意是两个下划线,可以获取到其对应的属性) s_all = Student.objects.filter...若要引用一个“反向”的关系,只需要使用该模型的小写的名称!!!
简介 查询集表示从数据库中获取的对象集合 查询集可以含有零个、一个或多个过滤器 过滤器基于所给的参数限制查询的结果 从Sql的角度,查询集和select语句等价,过滤器像where和limit子句 接下来主要讨论如下知识点...,[0:1].get()引发DoesNotExist异常 查询集的缓存 每个查询集都包含一个缓存来最小化对数据库的访问 在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中...filter(bpub_date__year=1980) filter(bpub_date__gt=date(1980, 12, 31)) 跨关联关系的查询:处理join查询 语法:模型类名...')) django支持对F()对象使用算数运算 list.filter(bread__gte=F('bcommet') * 2) F()对象中还可以写作“模型类__列名”进行关联查询 list.filter...对于地区信息,属于一对多关系,使用一张表,存储所有的信息 类似的表结构还应用于分类信息,可以实现无限级分类 新建模型AreaInfo,生成迁移 class AreaInfo(models.Model)
六、基于对象的跨表查询 正向与反向查询 关键在于ForeignKey字段写的位置。...例如下面这段代码, 关系属性(字段)写在哪个类(表)里面,从当前类(表)的数据去查询它关联类(表)的数据叫做正向查询,反之叫做反向查询 Publish查询Book的内容就是反向查询 Book查询Publish...的内容就是正向查询 ?...已知用户名,查询用户的电话号码。...').first() result = author_obj.authorDetail.telephone 反向查询 查到对象后,通过小写的表名来获取另一个表的属性 author_detail_obj
关联关系操作Django提供了一系列操作,用于在关联关系上进行查询和操作。...下面是一些示例:通过一对一关系查询person = Person.objects.get(name='John')address = person.address在上面的代码中,我们首先获取一个Person...通过一对多关系查询author = Author.objects.get(name='Jane')books = author.book_set.all()在上面的代码中,我们首先获取一个Author实例...通过多对多关系查询course = Course.objects.get(name='Math')students = course.student_set.all()在上面的代码中,我们首先获取一个Course...最后,我们保存这个新的Book实例,这样它就会与这个Author实例建立一对多的关联关系。
Django是一个流行的Python Web框架,其模型层允许开发人员定义数据库模型以及它们之间的关系。...这些关系被称为模型关联关系,允许开发人员在不同的模型之间建立复杂的关联关系,从而实现更高级别的数据结构。一对一关系一对一关系是指两个模型之间存在唯一的对应关系。...在Django中,可以使用OneToOneField字段来定义一对一关系。...一对多关系一对多关系是指一个模型可以对应多个另一个模型的实例。在Django中,可以使用ForeignKey字段来定义一对多关系。...多对多关系多对多关系是指两个模型之间存在多个对应关系。在Django中,可以使用ManyToManyField字段来定义多对多关系。
一对多表关系 在 Mysql 中一对多是通过外键实现的,在 django 模型中通过 ForeignKeyField 类型实现。...框架篇-Django博客应用-更新首页 一对一表关系 在 Mysql 中一对一是通过外键加唯一键实现的,在 django 模型中通过 OneToOneField 类型实现。...多对多表关系 在 Mysql 中多对多是通过中间表外键加联合唯一键实现的,在 django 模型中通过 ManyToManyField 类型实现。中间表模型会自动创建。...例子: 学院---学生---课程---学生成绩 学院与学生一对一关系,学生与课程多对多关系 课程 学生成绩 关系表中数据的操作 : 同级目录下的 views.py from django.http import...() # 多对多的反向查询 print(cs.student_set.all()) return HttpResponse("查询数据成功")
from myproject.models import * from django.db import connection cur = connection.cursor() cur.execute...c) #(1, 'zhangsan', 88, 1) #(2, 'lisi', 99, 1) #(3, 'wangwu', 66, 2) def test(sql): from django.db
引言 在之前的 Django模型设计 中简单的介绍了如何利用模型类对数据库进行增删改查,在这篇中主要介绍使用模型类对数据库进行条件查询。让大家更加熟悉 Django 操作数据库。...通过 属性名_id 表示外键对应对象的 id 值。 语法如下: 属性名称__比较运算符=值 说明:属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线。...答:使用 F对象,被定义在 django.db.models 中。 语法如下: F(属性名) 例:查询阅读量大于等于评论量的图书。...books = BookInfo.objects.filter(read__gt=F('comment') * 2) Q对象 多个过滤器逐个调用表示逻辑与关系,同 sql语句 中 where 部分的 and...聚合函数包括:Avg、Count、Max、Min、Sum,被定义在django.db.models 中。 例:查询图书的总阅读量。
Django ORM模型设计-活动报名 ?...Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现在企业与客户之间的业务和企业内部部门之间的业务。...model 认证方式继承于 django 自带认证 from django.contrib.auth.models import User from django.db import models from...(verbose_name='姓名',max_length=64) # 一个用户可以有多个角色,一个角色可以对应多个用户 role = models.ManyToManyField(Role
上一篇Django 2.1.7 模型 - MVT模型增删功能讲述了关于MVT模型中列表的增加数据以及删除数据的功能,在数据返回的过程中,也有部分关于模型之间关联查询的数据。...本篇章将着重讲述模型之间的关联查询。...字段查询 使用模型来实现sql中where的功能,可以通过调用 过滤器filter()、exclude()、get() 来实现。 其中,"属性名_id"表示外键对应对象的id值。...属性名称__比较运算符=值 看完上面几句话,肯定是似懂非懂的,那么我们来进入django的交互模式,引入数据模型类来查询一下看看。...: 那么下面使用django的模型查询看看,如下: In [6]: serverinfo = ServerInfo.objects.filter( id__exact = 1 ) In [7]: for
前言 前面一篇在xadmin后台一个页面显示2个关联表(OneToOneField)的字段,使用inlines内联显示。本篇继续学习一对一(OneToOneField)关系的查询。...上一篇list_display只显示了当前表的字段信息,如果想显示关联表的字段,需要关联查询。...一对一(OneToOneField)关系 接着前面的一篇python测试开发django-35.xadmin注册表信息,先设计Card和CarDetail表 # models.py from django.db...正向查询 接着上面的操作,查询Card表的card_id和card_user字段值 >>> c.card_id '900100200300400501' >>> c.card_user '乔峰' 通过Card...python测试开发django-35.xadmin注册表信息通过内联(inlines)可以在详情页面显示关联的表信息 ?
六、Django学习之基于下划线的跨表查询 一对一 正向查询的例子为 已知用户名,查询用户的电话号码。反向查询例子反之。...正向查询 其中下划线前的表示表名,无下划线的表示的是Author表 result = models.Author.objects.filter(name='admin').values("authorDetail...__telephone",'name','age') 反向查询 values可以不写,则去除能拿到的全部数据。...) 一对多 正向查询 result = models.Book.objects.filter(title='第一本书').values("publishs__name") 反向查询 result....values('title') 进阶使用 三表联查 查询老男人出版社出版的书的名字和作者的名字 obj = models.Book.objects.filter(publishs__name='老男人出版社
所谓对象关系映射,就是将数据库的一些名字与python中的一些名字相对应,表名-->类名,字段-->属性,操作(增删改查)-->方法。这样,我们就可以通过对Python代码的编辑来对数据库进行操作。...book/models.py from django.db import models # Create your models here. class Student(models.Model):...,这句是靠id从大到小排序 ordering=['-id'] db_table = 'student' book/admin.py from django.contrib...StudentAdmin(admin.ModelAdmin): list_display = ['id','name','age','gender','is_deleted','introduce'] #将模型进行注册...点击students,会有相应表的信息: ?
上一篇Django 2.1.7 模型 - MVT模型增删功能讲述了关于MVT模型中列表的增加数据以及删除数据的功能,在数据返回的过程中,也有部分关于模型之间关联查询的数据。...本篇章将着重讲述模型之间的关联查询。...字段查询 使用模型来实现sql中where的功能,可以通过调用 过滤器filter()、exclude()、get() 来实现。 其中,"属性名_id"表示外键对应对象的id值。...” 属性名称__比较运算符=值 看完上面几句话,肯定是似懂非懂的,那么我们来进入django的交互模式,引入数据模型类来查询一下看看。...: 那么下面使用django的模型查询看看,如下: In [6]: serverinfo = ServerInfo.objects.filter( id__exact = 1 ) In [7]: for
欢迎阅读本专栏其他文章 Django 之路由篇 Django 之视图篇 Django 之模板篇 Models 模型 ORM --- ObjectRelationMap...ta = Teacher.objects.filter(course__contains="a") 数据库表关系 多表连查:利用多个表联合查找莫一项信息或多项信息from django.db import...:在模型任意一边即可,使用OneToOneFieldadd 添加没有关系的一边,直接实例化保存就可以 s = School() s.school_id = 2...如果知道老师, 查学校,则通过增加的关系属性,直接使用 例如,查询t1老师是哪个学校的 In [30]: t1.my_school Out[30]: 反查 查询学校所有的老师,则系统自动在学校模型下添加属性 In [34]: s1.teacher_set.all() Out[34]: [<Teacher
0904自我总结 django模型中有外键关系的表删除相关设置 一.一对一 例如有Author、AuthorDetail两表 author = models.OneToOneField(to='Author...related_name='detail', db_constraint=False, on_delete=models.CASCADE ) 1)关系字段放在...Book表中(多的一方):出版社删除书外键不动,书删除没有任何影响 2)出版社找书用 外键related_name(books),书找出版社 外键字段(publish) 3)db_constraint..., models.CASCAD为级联关系,'SET_NULL'置空,SET_DEFAULT设为默认值 两者区别 models.SET关联表内容删了,关联的相关内容不会删除 models.CASCAD关联表内容删了...,关联的相关内容会删除 db_constraint关系断开后,但是不影响联表查询 四.多对多关系 例如Book、Author两表 authors = models.ManyToManyField(to=
上一篇Django 2.1.7 模型 - 条件查询、模糊查询、空查询、比较查询、范围查询、日期查询讲述了关于Django模型的查询。...但是都是条件与常量的查询,以及单条件查询,那么本篇章来介绍F对象、Q对象、聚合查询等功能。...语法如下: F(属性名) 使用F对象需要导入库,如下: from django.db.models import F 下面使用模型来查询 shelves_date 的结果,如下...`update_time` * 2)) LIMIT 21 Q对象 前面的查询可以看到都是单条件查询,并没有多个条件查询。...`update_time`)) LIMIT 21 ---- 最后再写一个not关系的,如下: In [7]: MiddlewareInfo.objects.filter( ~Q( server_id_
32) f2= models.IntegerField() f3 = models.ForeignKey('B1') 在views.py中: #B2中 外键f3 指向B1中u1=‘x’ 的所有对象的列表...obj_list = B2.objects.filter(f3__u1='x') #B2中 外键f3 指向B1中u1=‘x’ 的所有对象的f1的值的列表 obj_f1_list = B2.objects.filter
第2章 关系模型介绍 2.1 关系数据库的结构 关系 属性(attributes):表中每一列数据。...正如我们所注意到的那样,人名显然是不足以作主码的,因为可能有多个 人重名。...2.6 关系运算 2. 7 总结 关系数据模型(relational data model)建立在表的集合的基础上。...关系的模式包括它的属性,还可能包括属性类型和关系上的约束, 比如主码和外码约束。 关系的超码(superkey)是一个或多个属性的集合,这些属性上的取值保证可以唯一识别岀关系中的元 组。...关系代数(relational algebra)提供了一组运算.它们以一个或多个关系为输入,返回一个关系作为输 出。诸如SQL这样的实际查询语言是基于关系代数的•但增加了一些有用的句法特征。