浅谈django model的get和filter方法的区别(必看篇)


Posted in Python onMay 23, 2017

django的get和filter方法是django model常用到的,搞清楚两者的区别非常重要。

为了说明它们两者的区别定义2个models

class Student(models.Model):
name = models.CharField('姓名', max_length=20, default='')
age = models.CharField('年龄', max_length=20, default='')


class Book(models.Model):
student = models.ForeignKey(Student)

一、先说下django的get方法:

1、django的get方法是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。

比如我数据库里有一条记录,记录的name的值是三水点靠木Python的话,我用student = Student.objects.get(name='三水点靠木python'),

返回的是一个记录对象,你可以通过student . _ _ dict _ _来查看,它返回的是一个字典的形式,{'key':valeus},key是字段的名称,而values是值的内容。

而如果我用get方法来查询一个数据库里不存在的记录,程序会报错。

比如:student = Student.objects.get(name='三水点靠木'),你自己可以运行看下。

2、如果你用django的get去取得关联表的数据的话,而关键表的数据如果多于2条的话也会报错。

比如我的student表里有一个记录:

d name age
1 python 24

book表:

id student_id
1 1
2 1

我用

student = Student.objects.get(name='python')
book = Book.objects.get(student)

它也会报错,因为book表有2条记录和student表相匹配。

二、再说下django filter:

1、django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。

比如我数据库里有一条记录,记录的name的值是三水点靠木python的话,我用

student = Student.objects.filter(name='三水点靠木python')

它返回的student是一个对象的列表,可以看的出来student[0]和上面的get方式返回的student的结果是一样的。

2、如果你用django的get去取得关联表的数据的话,无论关联表有多少记录的都不会报错。

django 除了model比较强大的话,表单和模板也很强大.

另外我从别的资料里看到filter好像有缓存数据的功能,第一次查询数据库并生成缓存,下次再调用filter方法的话,直接取得缓存的数据,会get方法每次执行都是直接查询数据库的,不知道这个是不是正确。

这是我用了一段时间django的一点心得体会,希望对大家了解django get和filter有帮助!

以上这篇浅谈django model的get和filter方法的区别(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python解析xml文件操作实例
Oct 05 Python
python技能之数据导出excel的实例代码
Aug 11 Python
Python实现屏幕截图的两种方式
Feb 05 Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 Python
python中sys.argv函数精简概括
Jul 08 Python
django框架自定义用户表操作示例
Aug 07 Python
python实现网页自动签到功能
Jan 21 Python
python+pyqt5实现24点小游戏
Jan 24 Python
Python3.4解释器用法简单示例
Mar 22 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
Dec 30 Python
Pytorch环境搭建与基本语法
Jun 03 Python
Python常用内置模块之xml模块(详解)
May 23 #Python
Python使用PyCrypto实现AES加密功能示例
May 22 #Python
django+js+ajax实现刷新页面的方法
May 22 #Python
Python正则表达式经典入门教程
May 22 #Python
Python AES加密模块用法分析
May 22 #Python
Python 安装setuptools和pip工具操作方法(必看)
May 22 #Python
对Python进行数据分析_关于Package的安装问题
May 22 #Python
You might like
php中实现记住密码自动登录的代码
2011/03/02 PHP
php实现文件下载代码分享
2014/08/19 PHP
ecshop实现smtp发送邮件
2015/02/03 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
Javascript中的数学函数
2007/04/04 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
jquery实现的省市区三级联动
2015/04/02 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
文字垂直滚动之javascript代码
2015/07/29 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
微信小程序表单验证功能完整实例
2017/12/01 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
利用aardio给python编写图形界面
2017/08/21 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
Python基于requests库爬取网站信息
2020/03/02 Python
Python 解析xml文件的示例
2020/09/29 Python
荟萃全球保健品:维他购
2018/05/09 全球购物
护士实习生自我鉴定范文
2013/12/10 职场文书
就业协议书范本
2014/04/11 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
婚礼父母答谢词
2015/01/04 职场文书
同学毕业留言寄语
2015/02/27 职场文书