有什么区别
mymodel=model.objects.get(name='pol')
Run Code Online (Sandbox Code Playgroud)
和
mymodel=model.objects.filter(name='pol')
Run Code Online (Sandbox Code Playgroud)
Sam*_*lan 50
在Django的查询集文档都对这个很清楚的:
get(**kwargs)¶
返回与给定查找参数匹配的对象,该参数应采用字段查找中描述的格式.
如果找到多个对象,则get()引发MultipleObjectsReturned.MultipleObjectsReturned异常是模型类的属性.
如果找不到给定参数的对象,则get()引发一个DoesNotExist异常.此异常也是模型类的属性.
filter(**kwargs)
返回包含与给定查找参数匹配的对象的新QuerySet.
基本上,使用get()时你想获得一个唯一的对象,而filter()当你想获得的所有对象符合您查询参数.
另外,在旁注中,假设pol不可用:
if mymodel=model.objects.get(name='pol').exists()==False:
print "Pol does not exist"
Run Code Online (Sandbox Code Playgroud)
你会得到:AttributeError:'Model'对象没有属性'exists'
但:
if mymodel=model.objects.filter(name='pol').exists()==False:
print "Pol does not exist"
Run Code Online (Sandbox Code Playgroud)
你会得到:Pol不存在.
即如果要根据是否可以找到单个对象来运行某些代码,请使用过滤器.由于某种原因,exists()适用于QuerySet,但不适用于使用get返回的特定对象.
get() 返回一个与查找条件匹配的对象。
filter() 返回一个与查找条件匹配的查询集。
例如,以下
Entry.objects.filter(pub_date__year=2006)
Run Code Online (Sandbox Code Playgroud)
相当于
Entry.objects.all().filter(pub_date__year=2006)
Run Code Online (Sandbox Code Playgroud)
这意味着如果模型类有大量对象,则 filter() 的操作稍微昂贵,而 get() 是直接方法。
来源:Django 进行查询
| 归档时间: |
|
| 查看次数: |
16457 次 |
| 最近记录: |