首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Python全栈100天学习笔记】Day41 Django深入理解框架

> 说明1:由于员工与部门之间存在多对一外键关联,所以也能通过部门反向查询该部门员工(从一对多关系“一”一方查询“多”一方),反向查询属性默认名字是类名小写_set(如上面例子emp_set...),当然也可以在创建模型时通过ForeingKeyrelated_name属性指定反向查询属性名字。...如果不希望执行反向查询可以将related_name属性设置为'+'或以'+'开头字符串。...说明2:查询多个对象时候返回QuerySet对象QuerySet使用了惰性查询,即在创建QuerySet对象过程不涉及任何数据库活动,等真正用到对象时(求值QuerySet)才向数据库发送SQL...related_name:用于获取关联对象关联管理器对象反向查询),如果不允许反向,该属性应该被设置为'+',或者以'+'结尾。 to_field:指定关联字段,默认关联对象主键字段。

2.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

Django之ORM

Django具体对应方式为: 类名对应数据库表名 类名对应数据库表名 类属性对应数据库里字段 类实例对应数据库表里一行数据 类实例对象属性对应这行字段值 一.数据库连接 Django...2.QuerySet对象 查询结果集就是一个QuerySet对象 QuerySet对象就像是一个列表,列表存储着查询出结果,可以迭代,可以切片 DjangoQuerySet对象是惰性,即你得到这个对象时候并没有真正在数据库执行...SQL语句,只有用到了QuerySet对象数据才会执行SQL语句 想判断QuerySet对象是否有数据,若写成 if obj: 仍然会执行SQL语句,若使用 if obj.exists(): 就可以避免这种问题...QuerySet对象使用是有cache缓存,即遍历第二次QuerySet对象时候数据是从缓存,不会执行SQL语句 如果QuerySet对象数据量特别大,遍历时为了避免占用大量cache空间,...__iendswith 不区分大小写 等等 5.聚合查询aggregate 聚合查询是对QuerySet对象进行计算得到一个结果值作为字典值放到一个字典 这里先引入一些聚合方法 from django.db.models

1.1K30

Django学习笔记之Queryset详解

manager类,而不是自定义QuerySet类,一般我们没有自定义QuerySet必要;django.db.models模块Model类,我们定义表model时,就是继承它,它功能很强大...'Beatles Blog') #限定外键表字段 #下面是反向连接,不过要注意,这里不是entry_set,entry_set是Blog instance一个属性,代表某个Blog object...#关联所有entry,而QuerySet方法反向连接是直接用model小写,不要把两者搞混。...OneToOne关系也是这样关联查询,可以看到,Django对OneToOne、OneToMany、ManyToMany关联查询及其反向关联查询提供了相同方式,真是牛逼啊。...=F('blog__name')) 2.4.2 Q类(对应and/or/not) 如果有or等逻辑关系呢,那就用Q类,filter条件可以是Q对象与非Q查询混和使用,但不建议这样做,因为混和查询时Q

2.7K30

Django之ORM数据库

作者详细模型:把作者详情放到详情表,包含性别,email地址和出生日期,作者详情模型和作者模型之间是一对一关系(one-to-one)(类似于每个人和他身份证之间关系),在大多数情况下我们没有必要将他们拆分成两张表...并提供了一个简介漂亮定义数据库字段语法。          每个模型相当于单个数据库表(多对多关系例外,会多生成一张关系表),每个属性也是这个表字段。...注意: 第二种方式修改不能用get原因是:update是QuerySet对象方法,get返回是一个model对象,它没有update方法,而filter返回是一个QuerySet对象(filter...) #因为一对多关系所以ret1.publisher是一个对象,而不是一个queryset集合 # 反向查找 ret2=models.Publish.objects.last()...此时Django为我们提供了F和Q查询: # F 使用查询条件值,专门取对象某列值操作 # from django.db.models import F # models.Tb1

2.5K10

Django】 开发:数据库操作和后台管理

wife = Wife.objects.get(name='王夫人') print(wife.name, '老公是', wife.author.name) 反向查询 通过反向关联属性查询 反向关联属性为实例对象....引用类名(小写),如作家反向引用为作家对象.wife 当反向引用不存在时,则会触发异常 # 通过 author.wife 关联属性 找 wife,如果没有对应wife则触发异常 author1 =...'还没有妻子') 一对多映射 一对多是表示现实事物间存在一对多对应关系。...出版社是:', abook.publisher.name) 通过 Publisher 查询 对应所有的 Book 【反向Django会在Publisher增加一个属性来表示对对应Book们查询引用...获取book对应作者中年龄大于80岁作者信息 通过 Author 查询对应所有的 Book【反向Django 会生成一个反向属性 book_set 用于表示对对应 book 查询对象相关操作

4K40

Django ORM模型:想说爱你不容易

Django数据模型建立过程很简单,就是继承django.db.modelsModel类,然后给它增加属性。每一个属性可以对应关系数据库一个字段。...上面的name属性,就对应了生成myapp_person表名为"name"一列。...关系 Django一对一、多对一、多对多关系可以通过下面方式表达: from django.db import models class Company(models.Model): name...需要注意是,在Django ORM,只能通过ForeignKey来定义多对一关系,不能显示地定义一对多关系。但你可以使用模型对象*_set语法来反向调用多对一关系。...此外,多对多关系也可以用类似的方式反向调用,比如: group.customer_set 此外,你还可以在模型中加入related_name参数,从而在反省调用时,改用"*_set"之外其他名称,比如

77220

Django ORM模型:想说爱你不容易

Django数据模型建立过程很简单,就是继承django.db.modelsModel类,然后给它增加属性。每一个属性可以对应关系数据库一个字段。...上面的name属性,就对应了生成myapp_person表名为"name"一列。...关系 Django一对一、多对一、多对多关系可以通过下面方式表达: from django.db import models class Company(models.Model): name...需要注意是,在Django ORM,只能通过ForeignKey来定义多对一关系,不能显示地定义一对多关系。但你可以使用模型对象*_set语法来反向调用多对一关系。...此外,多对多关系也可以用类似的方式反向调用,比如: group.customer_set 此外,你还可以在模型中加入related_name参数,从而在反省调用时,改用"*_set"之外其他名称,比如

62620

Django ORM模型:想说爱你不容易

Django数据模型建立过程很简单,就是继承django.db.modelsModel类,然后给它增加属性。每一个属性可以对应关系数据库一个字段。...上面的name属性,就对应了生成myapp_person表名为"name"一列。...关系 Django一对一、多对一、多对多关系可以通过下面方式表达: from django.db import models class Company(models.Model): name...需要注意是,在Django ORM,只能通过ForeignKey来定义多对一关系,不能显示地定义一对多关系。但你可以使用模型对象*_set语法来反向调用多对一关系。...此外,多对多关系也可以用类似的方式反向调用,比如: group.customer_set 此外,你还可以在模型中加入related_name参数,从而在反省调用时,改用"*_set"之外其他名称,比如

1.3K80

Django学习笔记之Django ORM Aggregation聚合详解

(Count('book')) 返回QuerySet每个publisher都会带一个属性book_count。...但是第一个查询注解包含其该出版商发行所有图书总数;而第二个查询注解只包含出版过好书出版商所发行好书(评分大于3分)总数。在第一个查询,注解在过滤器之前,所以过滤器对注解没有影响。...=Count('authors')).order_by('num_authors') values() 通常,注解annotate是添加到每一个对象,一个执行了注解操作查询集 QuerySet 所返回结果...就不是在原始 QuerySet 返回结果对每个对象添加注解,而是根据定义在 values() 从句中字段组合对先结果进行唯一分组,再根据每个分组算出注解值,这个注解值是根据分组中所有的成员计算而得...对象,然后在每个分组得到id值总数。

1K20

Django实践-03模型-01表生成模型+学科页面与教师页面编写

: Teacher object (3)>]> 说明1:由于老师与学科之间存在多对一外键关联,所以能通过学科反向查询到该学科老师(从一对多关系“一”一方查询“多”一方),反向查询属性默认名字是类名小写..._set(如上面例子teacher_set),当然也可以在创建模型时通过ForeingKeyrelated_name属性指定反向查询属性名字。...如果不希望执行反向查询可以将related_name属性设置为’+‘或者以’+'开头字符串。...说明2:ORM查询多个对象时会返回QuerySet对象QuerySet使用了惰性查询,即在创建QuerySet对象过程不涉及任何数据库活动,等真正用到对象时(对QuerySet求值)才向数据库发送...说明3:如果希望更新多条数据,不用先逐一获取模型对象再修改对象属性,可以直接使用QuerySet对象update()方法一次性更新多条数据。

16920

使用ORM完成模型CRUD操作

在了解了Django提供模型管理平台之后,我们来看看如何从代码层面完成对模型CRUD(Create / Read / Update / Delete)操作。...>]> 说明1:由于员工与部门之间存在多对一外键关联,所以也能通过部门反向查询该部门员工(从一对多关系“一”一方查询“多”一方),反向查询属性默认名字是类名小写_set(如上面例子emp_set...),当然也可以在创建模型时通过ForeingKeyrelated_name属性指定反向查询属性名字。...如果不希望执行反向查询可以将related_name属性设置为'+'或以'+'开头字符串。...说明2:查询多个对象时候返回QuerySet对象QuerySet使用了惰性查询,即在创建QuerySet对象过程不涉及任何数据库活动,等真正用到对象时(求值QuerySet)才向数据库发送SQL

67410

django 1.8 官方文档翻译: 2-2-1 执行查询

与 entry 相关联,Django 会认为它没有 name 属性,而不会因为不存在 author 抛出异常。...Django 也提供反向获取关联对象 API,就是由从被关联对象得到其定义关系对象。...一对一关系 相对于多对一关系而言,一对一关系不是非常简单。如果你在 model 定义了一个 OneToOneField 关系,那么你就可以用这个字段名称做为属性来访问其所关联对象。...和你定义正向关联所用方式一样,类实例也可以赋予逆向关联方系: e.entrydetail = ed 关系反向连接是如何做到? 其他对象关系映射(ORM)需要你在关联双方都定义关系。...任何一个 model 在第一次调用时,Django 就会遍历所有的 INSTALLED_APPS 所有 models,并且在内存创建中必要反向连接。

4.3K20

DjangoORM操作

(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet时候才执行。...orm时候,我们可以把一对多,多对多,分为正向和反向查找两种方式。...__关联表字段 通过对象形式反向跨表:小写表名_set().all() 1对多 如果A表1条记录对应B表N条记录成立,两表之间就是1对多关系;在1对多关系 A表就是主表,B表为子表...='xxxx') #回复ID 多对多 多对多关系表 数据查找思路 找到该对象 通过该对象 反向操作 找到第三张关系表 通过第三张关系表 正向操作 找到 和该对象关系对象 总结(只要对象1和对象...2 中间有关系表建立了关系对象1反向操作 到关系表 ,关系表正向操作到对象2,反之亦然

4.7K10

Django学习笔记之Models与ORM操作

,values返回是一个字典序列 # count(): 返回数据库匹配查询(QuerySet)对象数量。...) #因为一对多关系所以ret1.publisher是一个对象,而不是一个queryset集合 # 反向查找 ret2=models.Publish.objects.last()...# 拿到没有外键字段对象 print(ret2.name) print(ret2.city) #如何拿到与它绑定Book对象呢?...#一对多和多对多在这里用法没区别 # 反向查找(条件)----在没有外键,查找与其关联表字段信息 #反向查找之一对多: ret8=models.Publisher.objects.filter...F查询和Q查询     F 使用查询条件值,专门取对象某列值操作     Q 查询提供了或操作 # from django.db.models import F # models.Tb1

1.2K60

Django——model基础

ORM 映射关系:     表名 类名 字段 属性     表记录 类实例对象 创建表(建立模型) 实例:我们来假定下面这些概念...在上面的例子,我们并没有传入blog参数给create()。Django会明白新 Entry对象blog 应该添加到b。 remove(obj1[, obj2, ...])...对查询结果反向排序   distinct():            从返回结果剔除重复纪录   count():              返回数据库匹配查询(QuerySet)...注意: 第二种方式修改不能用get原因是:update是QuerySet对象方法,get返回是一个model对象,它没有update方法,而filter返回是一个QuerySet对象(filter...(例如,遍历 QuerySet,在每个对象上调用 delete()方法),而不是使用 QuerySet delete()方法。

1.1K100

Python Day16 Django

文件,然后删掉不要 此时,访问网页时,url地址需要加上/app01/ 反向解析 访问网页url由于业务变化等关系可能会变动,此时引用他们地方就会面临更改问题。...在URL控制器(project/urls.py),给匹配规则起个别名可以解决这个问题,这就叫做反向解析 在需要URL 地方,对于不同层级,Django 提供不同工具用于URL 反查: 在模板...] print(book) # model对象 python get(kwargs): 返回与所给筛选条件相匹配对象**,返回结果有且只有一个, 如果符合筛选条件对象超过一个或者没有都会抛出错误...() print(ret) count(): 返回数据库匹配查询(QuerySet)对象数量。...---- 注意了: Book里这个author只是这个类属性,在最终生成数据库表没有这个字段,只是用于orm生成关系表 最终会生成四张表 app01_author #

1.9K10

Django---ORM操作大全

:(在django,根据代码类自动生成数据库表也叫--code first) ORM:Object Relational Mapping(关系对象映射) 类名对应------》数据库表名 类属性对应...---------》数据库里字段 类实例对应---------》数据库表里一行数据 obj.id  obj.name.....类实例对象属性 Django orm优势: Djangoorm操作本质上会根据对接数据库引擎...) 多对多关系表   数据查找思路 1、找到该对象2.通过该对象 反向操作 找到第三张关系表3.通过第三张关系表 正向操作 找到 和该对象关系对象总结(只要对象1和对象2 中间有关系表建立了关系对象...1反向操作 到关系表 ,关系表正向操作到对象2,反之亦然 2、第3张关系表不用写(m=models.ManyToManyField(' 要关联表') 自动生成  ) ?...此时Django为我们提供了F和Q查询: 1、F 可以获取对象字段属性(列),并对其进行操作; from django.db.models import F,Q #F 可以获取对象字段属性

6.8K100
领券