mie*_*nik 1 django model django-models
结果之间是否存在差异:
MyModel.objects.filter(pk=1)
Run Code Online (Sandbox Code Playgroud)
和
MyModel.objects.get(pk=1)
Run Code Online (Sandbox Code Playgroud)
如果没有区别,为什么.get()方法存在?
.get()总是返回该对象(如果存在的话)(如果只有一个).如果它不存在,它也会引发异常.例如
blah = MyModel.objects.get(pk=1)
Run Code Online (Sandbox Code Playgroud)
blah是MyModel的一个实例.另一方面,.filter()如果不存在则不会返回错误.
blah = MyModel.objects.filter(pk=1234234234)
Run Code Online (Sandbox Code Playgroud)
然后blah是一个空查询.你可以通过调用.count()来检查这个问题.如果blah.count()== 0表示没有带有密钥1234234234的MyModel项.同样,如果有多个具有该查询的项目说:
blah = MyModel.objects.filter(name__contains="Brian")
Run Code Online (Sandbox Code Playgroud)
您将获得一个可以进行交互以获得每个结果的查询结果:
for b in blah:
print b.name
Run Code Online (Sandbox Code Playgroud)
另外,另一个与.get()类似的有趣方法是.get_or_create()http://www.djangoproject.com/documentation/models/get_or_create/这可以说:
blah,created = MyModel.objects.get_or_create(name="Brian Ray",
cool=False,
fun=True)
Run Code Online (Sandbox Code Playgroud)
如果已经存在通常与.get()一起返回的BrianRay,则它只返回该实例; 否则,它会创造它.注意它返回两件事.第二个只是一个标志,让来电者知道实际发生了什么.
HTH,Brian Ray
| 归档时间: |
|
| 查看次数: |
913 次 |
| 最近记录: |