我是Django的新手,想了解filter vs get
之间的区别获取
Entry.objects.get(id__exact=14)
过滤
Entry.objects.filter(id__exact=14)
上述陈述有何不同?
提前致谢。
答案 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)
------- ------成功
答案 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只是返回一个具有字段作为属性的对象,因此获取所需的数据要简单得多。