浅谈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 获取新浪微博的最新公共微博实例分享
Jul 03 Python
python字符串排序方法
Aug 29 Python
Python编程之变量赋值操作实例分析
Jul 24 Python
python多进程实现进程间通信实例
Nov 24 Python
pytorch构建网络模型的4种方法
Apr 13 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
Dec 11 Python
python可视化篇之流式数据监控的实现
Aug 07 Python
Python读取表格类型文件代码实例
Feb 17 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
如何在keras中添加自己的优化器(如adam等)
Jun 19 Python
浅谈python 类方法/静态方法
Sep 18 Python
Python可视化学习之seaborn绘制矩阵图详解
Feb 24 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常见的魔术方法详解
2014/12/25 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
JS代码放在head和body中的区别分析
2011/12/01 Javascript
JS求平均值的小例子
2013/11/29 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
js图片处理示例代码
2014/05/12 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
Vue-router 中hash模式和history模式的区别
2018/07/24 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
vue-router传参用法详解
2019/01/19 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
线程和进程的区别及Python代码实例
2015/02/04 Python
Python简单连接MongoDB数据库的方法
2016/03/15 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
PyCharm配置mongo插件的方法
2018/11/30 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
师范生见习报告
2014/10/31 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
大学毕业论文致谢词
2015/05/14 职场文书