一. django get方法和filter方法详解
1.django的objects.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表相匹配。
2.django的 objects.filter()方法:
django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。
比如我数据库里有一条记录,记录的name的值是Python的话,我用
student = Student.objects.filter(name=‘python’)
它返回的student
是一个对象的列表,可以看的出来student[0]
和上面的get
方式返回的student
的结果是一样的。
二. 最大区别:
get
返回的是一个对象,并不是一个列表,相反filter
得到的才是一个列表(一个对象列表)。因此当对象不存在时,get
会报错,而filter
则不会,返回一个空列表(没有对象)。
所以可以这样认为,get
方法只能取到一个对象,而filter
方法可以取到多个对象get方法取不到对象的话就会报错,而filter
方法则相反,它是返回一个空列表。
#转自:https://blog.youkuaiyun.com/weixin_43465312/article/details/99132300
#如侵权请联系我进行删除