Django の初心者で、フィルターと取得の違いを理解したいと考えています。
得る
Entry.objects.get(id__exact=14)
フィルター
Entry.objects.filter(id__exact=14)
上記のステートメントはどのような違いをもたらしますか?
前もって感謝します。
Django の初心者で、フィルターと取得の違いを理解したいと考えています。
得る
Entry.objects.get(id__exact=14)
フィルター
Entry.objects.filter(id__exact=14)
上記のステートメントはどのような違いをもたらしますか?
前もって感謝します。
は、get
探しているものと等しい要素のみをもたらしますが、必要なfilter
アイテムに関連するすべてのものをもたらします。
filter は、見つかった多くのものを返します。get は、探しているものを 1 つだけ返します
例えば:
得る
Task.objects.get(id=1,status=1)
フィルター
Groups.objects.filter(user=1)
クエリに一致するのが 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 は正確に 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 はフィールドを属性として持つオブジェクトを返すだけなので、必要なデータを簡単に取得できます。