Django过滤器vs获取模型

时间:2013-03-06 15:29:58

标签: django-models

我是Django的新手,想了解filter vs get

之间的区别

获取

Entry.objects.get(id__exact=14)

过滤

Entry.objects.filter(id__exact=14)

上述陈述有何不同?

提前致谢。

4 个答案:

答案 0 :(得分:6)

get只会带来一个与您要查找的元素相同的元素,但filter会带来与您想要的项目相关的所有内容。

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

例如:

GET

Task.objects.get(id=1,status=1)

过滤

Groups.objects.filter(user=1)

答案 1 :(得分:2)

当您想要获取单个唯一对象时基本上使用get,并且当您想要获取与查找参数匹配的所有对象时进行过滤

 __data = User.objects.get(is_active=1).exclude(id=id)
  

错误:get()返回多个用户 - 它返回19!   类型:<class 'django.contrib.auth.models.MultipleObjectsReturned'>

------ -------成功

__data = User.objects.filter(is_active=1).exclude(id=id)

------- ------成功

Check the Link

答案 2 :(得分:1)

if you know it's one object that matches your query, use "get". It will fail if it's more       than one.
and gives the error like this
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!

otherwise use "filter", which gives you a list of objects.

答案 3 :(得分:1)

要补充别人所说的内容...(get返回正好1条记录,而filter返回一组记录),需要注意的重要一点是结果的 type

get()返回一个对象,而filter返回一个查询集类型。这意味着您可以做类似的事情

age = User.objects.get(name="Ryan").age

如果您使用过滤器,则需要执行几个额外的步骤:

ages = User.Objects.filter(name="ryan").values('age')
for user_age in users:
    print(user_age)

要注意的重要一点是filter返回一个带有value()方法的可迭代类型,该方法指示所需的字段。 Get只是返回一个具有字段作为属性的对象,因此获取所需的数据要简单得多。