浅谈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 相关文章推荐
python3序列化与反序列化用法实例
May 26 Python
python中函数传参详解
Jul 03 Python
python监控键盘输入实例代码
Feb 09 Python
django 多数据库配置教程
May 30 Python
python调用staf自动化框架的方法
Dec 26 Python
解决python3运行selenium下HTMLTestRunner报错的问题
Dec 27 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
python或C++读取指定文件夹下的所有图片
Aug 31 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 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 current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
JQuery的html(data)方法与<script>脚本块的解决方法
2010/03/09 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
Vue移动端实现图片上传及超过1M压缩上传
2019/12/23 Javascript
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
使用Python对Access读写操作
2017/03/30 Python
Python3几个常见问题的处理方法
2019/02/26 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
Python turtle库绘制菱形的3种方式小结
2019/11/23 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
Python定时器线程池原理详解
2020/02/26 Python
python3让print输出不换行的方法
2020/08/24 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
美国折扣网站:jClub
2017/08/07 全球购物
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
大学学习计划书范文
2014/05/02 职场文书
党小组评议意见
2015/06/02 职场文书
微观世界观后感
2015/06/10 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书