我是 Django 的新手,想了解 filter 与 get 之间的区别
得到
Entry.objects.get(id__exact=14)
筛选
Entry.objects.filter(id__exact=14)
上面的陈述有什么不同?
提前致谢。
我是 Django 的新手,想了解 filter 与 get 之间的区别
得到
Entry.objects.get(id__exact=14)
筛选
Entry.objects.filter(id__exact=14)
上面的陈述有什么不同?
提前致谢。
唯一会带来与get
您正在寻找的元素相同的元素,但会filter
带来与您想要的该项目相关的所有内容。
过滤器返回找到的许多东西。get 只返回你正在寻找的东西
例如:
得到
Task.objects.get(id=1,status=1)
筛选
Groups.objects.filter(user=1)
如果您知道这是一个与您的查询匹配的对象,请使用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!
否则使用filter
,它会为您提供对象列表。
基本上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)
- - - -成功的 - - -
为了补充其他人所说的......(get 只返回 1 条记录,而 filter 返回一组),需要注意的重要一点是结果的类型。
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 返回一个可迭代的类型,其中的 values() 方法指示您想要哪些字段。Get 只是返回一个带有字段作为属性的对象,因此获取所需的数据要简单得多。