浅谈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 相关文章推荐
在Django框架中设置语言偏好的教程
Jul 27 Python
Python在线运行代码助手
Jul 15 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 Python
教你用Python写安卓游戏外挂
Jan 11 Python
python利用smtplib实现QQ邮箱发送邮件
May 20 Python
pip 安装库比较慢的解决方法(国内镜像)
Oct 06 Python
opencv python如何实现图像二值化
Feb 03 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
详解Django中 render() 函数的使用方法
Apr 22 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的ASP防火墙
2006/10/09 PHP
谈谈新手如何学习PHP
2006/12/14 PHP
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
使用PHP curl模拟浏览器抓取网站信息
2013/10/28 PHP
PHP微信支付实例解析
2016/07/22 PHP
PHP类和对象相关系统函数与运算符小结
2016/09/28 PHP
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
2012/02/03 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
实例解析js中try、catch、finally的执行规则
2017/02/24 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python中random模块用法实例分析
2015/05/19 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
Python使用扩展库pywin32实现批量文档打印实例
2020/04/09 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
html5表单及新增的改良元素详解
2016/06/07 HTML / CSS
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
海蓝之谜英国官网:La Mer英国
2020/01/15 全球购物
一年级班主任寄语
2014/01/19 职场文书
上海世博会口号
2014/06/19 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
教师个人总结范文
2015/02/11 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
高一数学教学反思
2016/02/18 职场文书