update.はじめにDjangoではじめてモデルを使った処理を書こうとした時に、モデルを操作するメソッドの手前にobjectsの記述が必要な場合・不要な場合が理解できず、エラーを頻発させて苦労しました。この記事は、そんなDjango初心者の方を対象としています。150下記の処理がそれぞれエラーになる・ならない理由を順に解説していきます。正常4行目に出てくるobjectsはモデルマネージャと呼ばれるものです(各モデルクラスは、このモデルマネージャを持っています)。filter()メソッドは、このモデルマネージャのメソッドのひとつです。モデルに対してfilter()メソッドのようなモデルマネージャのメソッドを使うときはモデルクラス.モデルマネージャ.モデルマネージャのメソッドと記述します。エラーでは、モデルクラス.モデルマネージャのメソッドと記述しており、モデルマネージャであるobjectsが抜けているので、エラーになります。例)Blog.objects.filter(author='John')それ以外の場合は、.objectsは不要と覚えても良いかもしれません。モデルマネージャの名前がmanagerなどではなくobjectsであるかというと、Djangoのデフォルトでそのように決まっているからです(ここでは触れませんが、別の名前に変更することもできます)。クエリセットには、モデルマネージャのメソッドを連結できるクエリセットがどういうものであるかについては@okoppe8さんの以下の記事が詳しいのでそちらをご覧ください。正常まず、前提としてモデルマネージャのメソッドには、クエリセットを返すメソッドクエリセット以外(モデルのインスタンスなど)を返すメソッドがあります。filter()メソッドは前者に該当し、クエリセットを返します。4行目でitemsにはクエリセットが代入されています。エラーに出てくるorder_by()メソッドは、filter()メソッドと同様にモデルマネージャのメソッドです。正常(解説済)のようなモデルクラス.モデルマネージャ.モデルマネージャのメソッドといった記述では無いため、5行目はエラーになります。正常についてですが、クエリセット(のインスタンス).モデルマネージャのメソッドとなっていますが、これはエラーにはなりません。クエリセットに対しては、さらにモデルマネージャのメソッドを連結できるためです。Item.objects.filter(price=100).order_by('name')を2行に分けて実行していることになるので、6行目はエラーになりません。エラー8行目のget()メソッドも、モデルマネージャのメソッドです。get()メソッドは、モデルのオブジェクトを1件だけ取得するメソッドであり、モデルマネージャのメソッドとしてはクエリセットを返すメソッドクエリセット以外(モデルのインスタンスなど)を返すメソッドの後者に該当し、返ってくるのはモデルのインスタンスです。filter()メソッドやorder_by()メソッドのように、クエリセットは返しません。エラーは、クエリセット(のインスタンス).モデルマネージャのメソッドという記述ではなく、モデルのインスタンス.モデルマネージャのメソッドといった記述になっているのでエラーになります。エラーの2行目はエラーになります。モデルマネージャのメソッドは、モデルインスタンスで使うことはできないためです。エラーは、エラーになります。get()メソッドはクエリセットではなく、モデルのインスタンスを返しており、それに対してモデルマネージャのメソッドを連結することはできないためです。正常11行目では、モデルクラスItemから、モデルインスタンスnew_itemを生成しています。モデルマネージャ(objects)のメソッドは、モデルインスタンスで使用することはできません。12行目のようにモデルインスタンス.モデルマネージャ.・・・と記述することはありません。そもそも、save()メソッドは、モデルのインスタンスメソッドですので、13行目のようにモデルインスタンス.モデルインスタンスのメソッドと記述します。まとめobjectsはモデルマネージャと呼ばれるものであるモデルマネージャのメソッドは、モデルクラスやクエリセットインスタンスに対して使用できる。モデルインスタンスに対しては使用できない。クエリセットインスタンスに対してモデルマネージャのメソッドを使う場合は、モデルマネージャ(objects)の記述は不要。記述するとエラーになる。Item.objects.get(name='apple')モデルインスタンスに対してはモデルマネージャのメソッドは使えない。クエリセットを返さないメソッドには、モデルマネージャのメソッドを連結できない。Item.objects.get(name='apple').exists()モデルインスタンスに対して使うのは、モデルのインスタンスメソッドであり、モデルマネージャのメソッドではない。よって、モデルマネージャ(objects)の記述は不要。記述するとエラーになる。けインターネット写真サービス「はいチーズ!」を提供しています。upLoginユーザーは見つかりませんでした。