django中的objects.get和objects.filter方法的区别

为了说明它们两者的区别定义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的obj.get(): django的get是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。 比如我数据库里有一条记录,记录的name的值是"django"的话,我用student = Student.objects.get(name=‘django‘), 返回的是一个记录对象,你可以通过student.__dict__来查看,它返回的是一个字典的形式,{‘key‘:valeus},key是字段的名称,而values是值的内容。 而如果我用get方法来查询一个数据库里不存在的记录,程序会报错。 比如:student = Student.objects.get(name=‘python‘) 

如果你用django的get去取得关联表的数据的话,而关键表的数据如果多于2条的话也会报错。 比如我的student表里有一个记录:   id   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: 

django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。 比如我数据库里有一条记录,记录的name的值是Python的话,我用student = Student.objects.filter(name=‘python‘) 它返回的student是一个对象的列表,可以看的出来student[0]和上面的get方式返回的student的结果是一样的。

原文地址:https://www.cnblogs.com/silence181/p/8506444.html

时间: 2024-11-10 13:15:21

django中的objects.get和objects.filter方法的区别的相关文章

django model中get()和filter()方法的区别

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

django中三种判断请求类型的方法

1.面向对象方法 在views.py中编写 引入模块 from django import views 函数编写,创建类文件 class View(views.View): def get(self, request): print('GET方法') return HttpResponse('GET方法') def post(self, request): print('POST方法') return HttpResponse('POST方法') 配置路由 urls.py中编写 引入模块 fro

基于jquery的has()方法以及与find()方法以及filter()方法的区别详解

1. has(selector选择器或DOM元素)   将匹配元素集合根据选择器或DOM元素为条件,检索该条件在每个元素的后代中是否存在,将符合条件的的元素构成新的结果集. 例子如下:<ul>  <li>list item 1</li>  <li>list item 2    <ul>      <li><div><span>a</span></div>list item 2-a<

Linux系统中如何进入退出vim编辑器,方法及区别

在linux中,vim编辑器是系统自带的文本编辑器,其功能强大.这个VIM(VI)是很简单的.注意:linux命令要小写!VIM编辑器,可以新建文件也可以修改文件,命令为:vim  /usr/local/con.cfg 如果这个文件,以前是没有的,则为新建,输入命令点击回车后下方有提示为新文件.如果文件已存在,则没有提示.进入编辑器后,先按"I",即切换到"插入"状态.就可以通过上下左右移动光标,或空格.退格及回车等进行编辑内容了,和WINDOWS是一样的了.退出v

&lt;django中render_to_response的可选参数和使用方法&gt;

在django官方文档中有比较详细的介绍,在此我按照自己的理解适当的阐述一下: return render_to_response(①'my_template.html', ②my_data_dictionary, ③context_instance=RequestContext(request) )①template_name 毫无疑问这个就是你要渲染的模板的路径下的模板名,(一个.html文件),注意:这个参数是必须要求有的,假如没有的话是会报错的.(官方文档阐述:The full name

jquery中append、prepend, before和after方法的区别(一)

原文:http://blog.csdn.net/woosido123/article/details/64439490 在 jquery中append() 与 prepend()是在元素内插入内容(该内容变成该元素的子元素或节点),after() 与before()是在元素的外面插入内容(其内容变成元素的兄弟节点). 1. append()和prepend() <div class='a'> <div class='b'>b</div> </div> 1 2

JavaScript中的call、apply、bind方法的区别

在JS中,this的指向是动态变化的,很可能在写程序的过程中,无意中破坏掉this的指向,所以我们需要一种可以把this的含义固定的技术,于是就有了call,apply和bind这三个方法 apply:应用某一对象的一个方法,用另一个对象替换当前对象.call:调用一个对象的一个方法,以另一个对象替换当前对象. △它们的共同之处:都可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. △它们的不同之处:①apply:最多只能有两个参数—

js中字符串转换为数值的两种方法的区别

在js中字符串转换为数值的方法有三种:转换函数,强制类型转换,隐式转换 1.转换函数 parseInt()   //将字符串转换为整型 parseFloat()  //将字符串转换为浮点型 转换函数在进行类型转换时是可以传入参数的,默认转换为10进制,转换成功后返回的是整数类型的数值. 例:1. parseInt('AB3', 16) //返回结果:2739,表示将字符串转换为16进制的数值 2.parseInt('13', 10) //返回结果:13,表示将字符串转换为10进制的数值 3.pa

ASP.NET CS文件中输出JavaScript脚本的3种方法以及区别

Response.Write 与   Page.ClientScript.RegisterStartupScript 与 Page.ClientScript.RegisterClientScriptBlock 之间的区别 方法1,使用Response.Write,这种方法会把JS代码写在页面的最顶部(<html>的前面):System.Web.HttpContext.Current.Response.Write("<script language=javascript>a