13

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

得到

Entry.objects.get(id__exact=14)

筛选

Entry.objects.filter(id__exact=14)

上面的陈述有什么不同?

提前致谢。

4

4 回答 4

12

唯一会带来与get您正在寻找的元素相同的元素,但会filter带来与您想要的该项目相关的所有内容。

过滤器返回找到的许多东西。get 只返回你正在寻找的东西

例如:

得到

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

筛选

Groups.objects.filter(user=1)
于 2015-08-12T20:02:20.610 回答
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!

否则使用filter,它会为您提供对象列表。

于 2014-09-10T06:54:49.200 回答
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)

- - - -成功的 - - -

检查链接

于 2014-10-16T14:33:59.147 回答
1

为了补充其他人所说的......(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 只是返回一个带有字段作为属性的对象,因此获取所需的数据要简单得多。

于 2020-07-07T06:40:24.957 回答