get filter区别
django的get和filter方法是django model常用到的,搞清楚两者的区别非常重要。
get() // 获取一个单一obj
filter() 始终给你一个QuerySet,即使只有一个对象满足查询条件 —— 这种情况下,QuerySet将只包含一个元素。
如果你知道只有一个对象满足你的查询,你可以使用Manager的get() 方法,它直接返回该对象:
>>> one_entry = Entry.objects.get(pk=1)
可以对get() 使用任何查询表达式,和filter() 一样 —— 同样请查看下文的字段查询。
注意,使用get() 和使用filter() 的切片[0] 有一点区别。如果没有结果满足查询,get() 将引发一个DoesNotExist 异常。这个异常是正在查询的模型类的一个属性 —— 所以在上面的代码中,如果没有主键为1 的Entry 对象,Django 将引发一个Entry.DoesNotExist。
类似地,如果有多条记录满足get() 的查询条件,Django 也将报错。这种情况将引发MultipleObjectsReturned,它同样是模型类自身的一个属性。
注意:get方法不使用高速缓存(请参阅Caching and QuerySets)。这些方法每次被调用的时候都会查询数据库。
Filter() //返回一个Queryset
django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。
如果需要跟get一样只需要一个对象,可以使用以下方式:
>>> one_entry = Entry.objects.filter(pk=1).first()

浙公网安备 33010602011771号