the dawn of yuriko hisory

アニメやら漫画関係で何か作りたいものと勉強したことのメモ用

DjangoGirlsに挑戦 ~クエリセット1~

クエリセット

今回はPythonファイルをいじりません
データベースの接続方法とデータストアについて学ぶみたいです。
今回学ぶのに意識すべきことは、どうやってモデルからオブジェクトを読み込んだり抽出したりするかでしょうか

オブジェクトの取得

プロジェクトのフォルダからコンソールを開きます。
manage.pyがある場所です。

python manage.py shell

コマンドを入力するとインタラクティブコンソールが起動するので
ここからpythonのコマンドを入力していきます。

from blog.models import Post

Post.objects.all() //1

1.
クラスからオブジェクトをすべて取得します。

管理サイトで登録した内容が返ってきます
https://i.gyazo.com/d8beba66b91b89184667ea33f4e2ba68.png

オブジェクトの作成

次にPostモデルに新しいデータを作成していきます。

from blog.models import Post
from django.contrib.auth.models import User //1

me = User.objects.get(username='yuriko') //2
Post.objects.create(author = me, title = '茜ちゃんもかわいいよね?', text = 'うざい') //3

1.
管理サイト用のUserモデルです。
いつ作ったかと言われると自動的に作られています。
管理サイトにアクセスするためにsuperuserを作ったと思いますが、
その時に登録したものがUserモデルに登録されています。
この辺りはDBに実際につないで値を確認してみると良いです。
パスワードがハッシュ化されて登録などしてくれていたり何かと色々やってくれてます。

2.
変数meの中にUserオブジェクトからusernameに該当するオブジェクトを取得してきています。
usernameはsuperuserを作った際に登録したものが入っています。
これはUser.objects.all()で一回参照すると何を登録しているのかも確認できます。

3.
Post.objects.createはそのままPostオブジェクトに新しいデータを作ってDBに登録しています。
引数に関しては作成したPostを見てみてください。
created_dateはdefaultで登録した現在時刻が入り、
published_dateは空白、nullを許容しているため今回の登録時に省略をしてもエラーになりません。

フィルター機能

getは一つのオブジェクトしか返しません。
実際に
Post.objects.get(author=me)をやってみると
MultipleObjectsReturnedとエラーがでます。

特定の値に該当する複数のオブジェクトを取得するためにはfilterを使います。

Post.objects.filter(author=me)

https://i.gyazo.com/cbc693e489dbbcec5f435e2ec465542c.png

特定のキーワードが含まれている場合のfilterは

Post.objects.filter(title__contains='百合子')

titleの次は_が二つです。

https://i.gyazo.com/644683388518eeacbb0f9b3b14e3b93a.png

並べ替え

SQL分と同じくorder_byで該当するカラムを使ってやればOK
逆順の場合は-をつけて('-created_date')でできます。

Post.objects.order_by('created_date')

ここまでで
CRUDのうちCreateとReadができ
並べ替えもできたので、作成して必要な値を取得して画面に表示ができるようになりました。
後は今回やったような記述をView側で書いて値を取得、レスポンスに返してHTMLで描写すれば
動的なページもできますね。
次回はView側でどうやっていくかをやります。