13

Django の初心者で、フィルターと取得の違いを理解したいと考えています。

得る

Entry.objects.get(id__exact=14)

フィルター

Entry.objects.filter(id__exact=14)

上記のステートメントはどのような違いをもたらしますか?

前もって感謝します。

4

4 に答える 4

12

は、get探しているものと等しい要素のみをもたらしますが、必要なfilterアイテムに関連するすべてのものをもたらします。

filter は、見つかった多くのものを返します。get は、探しているものを 1 つだけ返します

例えば:

得る

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

フィルター

Groups.objects.filter(user=1)
于 2015-08-12T20:02:20.610 に答える
2

クエリに一致するのが 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、オブジェクトのリストを提供する を使用します。

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

注意すべき重要な点は、必要なフィールドを指定する values() メソッドを使用して filter が反復可能な型を返すことです。Get はフィールドを属性として持つオブジェクトを返すだけなので、必要なデータを簡単に取得できます。

于 2020-07-07T06:40:24.957 に答える