質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

3831閲覧

「model.objects」の意味が分からない。(django)

mullen

総合スコア7

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/07/22 03:49

Djangoチュートリアル次のページの「APIで遊んでみる」の箇所に次のコードの記載があります。

https://docs.djangoproject.com/ja/2.0/intro/tutorial02/

python

1>>> from polls.models import Choice, Question # Import the model classes we just wrote. 2 3# No questions are in the system yet. 4>>> Question.objects.all() 5<QuerySet []> 6

ここの、Question.objects.all()objectsがいきなり出てきて、意味が分かりません。

dir(Question)とすると、確かにobjectsは存在するのですが、なぜ、いつ存在するようになったのか分かりません。

Questionは、models.Modelを継承しているので、その中でゴニョゴニョしているのだと思ったり、所謂「おまじない」だと思えば良いのでしょうが、気持ち悪いです。

お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

同じ疑問にぶち当たり、過去の質問としてのこちらにたどり着きましたが、
得られた結果は「おまじないだから気にすんな」 のあんまりな結果だったので、
個人的に調べた内容を、未来に同じ疑問にぶち当たった人へ向けて回答します。

結論から、modelsで定義されているobjectsとはモデルマネージャのことを指しており、
具体的にはdjango\db\models\Manager.pyのことを指しているようです。
(objectsは、もともとmodels.Modelクラスに含まれている内容です。)

このモデルマネージャーとはmodels.pyで定義したモデルを管理するクラスで、
その中身は、filterメソッドなど、models.Modelで定義したモデルクラスを管理するためのメソッドが含まれてます。

django.db.models.Managerを継承することで、独自に管理するためのメソッドを用意できます。


【models.py】

from django.db import models class Clients_manager(models.Manager): def check_enabled(self): return self.filter(is_enabled=True) class Clients(models.Model): ・・・・・・・・・・・・・・・・ objects = Clients_manager()

【view.py】

class ListView(generic.ListView): model = Clients template_name = 'list.html' paginate_by = 2 def get_queryset(self): return Clients.objects.check_enabled()

投稿2020/09/05 13:23

編集2020/09/05 13:53
Madai

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatamyiwathy

2020/09/05 14:23

公式ドキュメントへのリンクもあると親切かと思います!
guest

0

大丈夫です。おまじないです。objectsって出てきたらデータベースにアクセスするんだなーくらいに思っておけばとりあえず大丈夫です。

投稿2018/07/22 12:37

tatamyiwathy

総合スコア1039

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mullen

2018/07/22 15:02

アドバイスありがとうございます。 おまじない程度の理解で大丈夫。というお考えは、理解いたしました。 ただ、私の質問の主旨としましては、これがなぜ利用できているのか、仕組み的なところを知りたくて質問しております。 自分なりに調べて、なんとな~く分かった来ましたので、自己解決を後日記入いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問