浅谈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设计模式编程之工厂方法模式的使用
Mar 02 Python
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
python进行TCP端口扫描的实现
Dec 21 Python
Python高级特性与几种函数的讲解
Mar 08 Python
python实现图片九宫格分割
Mar 07 Python
对python中的os.getpid()和os.fork()函数详解
Aug 08 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
浅谈pycharm导入pandas包遇到的问题及解决
Jun 01 Python
Python如何在bool函数中取值
Sep 21 Python
Python 中random 库的详细使用
Jun 03 Python
python面向对象版学生信息管理系统
Jun 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过程中的一些注意点的总结
2013/10/25 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
javascript的事件描述
2006/09/08 Javascript
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
JS实现多功能计算器
2020/10/28 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python基于numpy模块实现回归预测
2020/05/14 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
日期和时间问题
2015/01/04 面试题
制衣厂各岗位职责
2013/12/02 职场文书
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
2016年基层党支部书记公开承诺书
2016/03/25 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android
详解非极大值抑制算法之Python实现
2021/06/28 Python