Django过滤器vs获取模型

use*_*619 7 django-models

我是Django的新手,想了解filter vs get之间的区别

得到

Entry.objects.get(id__exact=14)
Run Code Online (Sandbox Code Playgroud)

过滤

Entry.objects.filter(id__exact=14)
Run Code Online (Sandbox Code Playgroud)

上述陈述有何不同?

提前致谢.

小智 7

get只会带来等于你在找什么,但一个元素filter带来相关的一切你想要的物品.

过滤器返回很多东西.得到的回报只有你要找的东西

例如:

得到

Task.objects.get(id=1,status=1)
Run Code Online (Sandbox Code Playgroud)

过滤

Groups.objects.filter(user=1)
Run Code Online (Sandbox Code Playgroud)


Pri*_*ank 2

如果您知道这是一个与您的查询匹配的对象,请使用get. 如果超过一个,就会失败,并给出如下错误:

Traceback (most recent call last):

    File "<console>", line 1, in <module>
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 143, in         get
    return self.get_query_set().get(*args, **kwargs)
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 407, in get
    (self.model._meta.object_name, num))
    MultipleObjectsReturned: get() returned more than one Poll -- it returned 2!
Run Code Online (Sandbox Code Playgroud)

否则使用filter,它会给你一个对象列表。