サイドバーの「Django ドキュメント検索」というプレースホルダの入った検索では、Django ドキュメント (Django 2.1) の公式サイト内を検索できます

はじめに

Django を学習するには、何はともあれ公式チュートリアル「はじめての Django アプリ作成」からスタートしてみるのが良いでしょう。しかし、いざチュートリアル通りに進めようとしても躓く場合も多いと思います。そこで、「チュートリアルの進め方」シリーズとして、チュートリアルに沿った作業を行いながら補足事項をまとめることにしました。チュートリアルで躓いた際のヒントとしてお使いください。

利用環境は Ubuntu、 Linux Mint を中心として説明しますが、 Windows についても補足します。

前回は、Django チュートリアルの進め方 その 2 (1) と題してはじめての Django アプリ作成、その 2 の前半についてまとめました。

今回は、はじめての Django アプリ作成、その 2 の中盤についてまとめました。(前後編でまとめるつもりでしたが、この章は分量が多いので3本立てになりました。)

API で遊んでみる

シェルを起動します。表示される文字列は環境によって異なります。

polls のモデルをインポートします。

オブジェクトを取得する

モデルクラスの objects 属性を使ってそのモデルの Manager を取得できます。Manager から QuerySet (レコードを表すオブジェクト) を取得できます。

Question に新しいデータを追加するには、Question のインスタンスを作成して save() を実行します。

作成したオブジェクトを確認してみます。


id フィールドは Django が自動生成したプライマリーキーのフィールドです。(自動インクリメントのプライマリーキーフィールド参照)

question_text, pub_date は、 Qusetion に定義したフィールドでした。それぞれ、質問内容と公開日を表しています。

 

データを更新する

このオブジェクトを使って、データを変更することもできます。

id が 1 のままですから、もとのデータであることがわかります。また、question_text のみが修正されて pub_date はそのままであることも確認できます。10行目は、Question.objects.all (Question の全オブジェクト) の文字列表現になります。

モデルに __str__() を定義する

もう少し詳細な情報があると便利ですので、 Python の特殊メソッドである __str__() をモデルに定義することによって実現します。

ソースの変更を反映するためシェルを起動しなおしてから、objects.all() を確認してみます。(チュートリアルではカスタムメソッド was_published_recently も追加していますが、一旦後回しにします。)

5行目の表現が id 番号でなく ,question_text の内容になったので、識別しやすくなりました。Django には管理画面の自動生成機能があり、管理画面でモデルを表示する際にも __str__ が利用されるため、ここ大事モデルには __str__() を定義するようにしましょう。

では、チュートリアルに戻って、 Question モデルにカスタムメソッド was_published_recently() を追加します。

再度、シェルを起動し直します。

フィルタを使う

フィルタを試してみます。

filter に「フィールド名=値」を渡すことによって、絞り込みができます。id=2 に該当するデータが無いことも確認できます。

次は文字列の前方一致検索です。

「フィールド名__startwith=検索値」とする (フィールド名と startwith の間はアンダースコア2つです。) 事で、フィールド値が検索値から始まるデータだけに絞り込みできます。この例では、'When' で始まるデータは無いことも確認できます。 filter へ渡す引数の詳細は、フィールドルックアップを参照してください。

get() を使う

次は get() を使ってデータを取得してみます。


get をつかった場合もフィールドルックアップを使って絞り込みができる事が確認できました。filter と get の違いは何でしょうか。
存在しない id=2 の場合で比較してみます。

get を使用した 3 〜 10行目は DoesNotExist 例外が発生しました。 filter は存在しないオブジェクトの場合は空の QuerySet が返ってきますが、get は例外が発生するという事ですね。

プライマリーキーへのアクセスは id の代わりに pk を使う事ができます。

データを登録する

次は pk=1 の Question に紐付いた Choice を登録してみます。

create でオブジェクトを作成し、all で作成したオブジェクト一覧を取得、count で個数を取得しています。
Choice へのフィルタと削除を試します。

3行目で choice_text が 'Just hacking' で始まる Choice を取得して削除しています。

今回は、シェルを使って Django のモデル API の動作を確認しました。

次回は、Django チュートリアルの進め方 その 2 (3) です。

参考

 

低価格なのに高速・多機能・高セキュリティ 月額400円(税別)から最大容量100GB WordPress専用高速サーバー Z.com WP
おすすめの記事