一. 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方法则相反,它是返回一个空列表