DjangoGirlsに挑戦 ~クエリセット1~
クエリセット
今回はPythonファイルをいじりません
データベースの接続方法とデータストアについて学ぶみたいです。
今回学ぶのに意識すべきことは、どうやってモデルからオブジェクトを読み込んだり抽出したりするかでしょうか
オブジェクトの取得
プロジェクトのフォルダからコンソールを開きます。
manage.pyがある場所です。
python manage.py shell
コマンドを入力するとインタラクティブコンソールが起動するので
ここからpythonのコマンドを入力していきます。
from blog.models import Post Post.objects.all() //1
1.
クラスからオブジェクトをすべて取得します。
オブジェクトの作成
次に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)
特定のキーワードが含まれている場合のfilterは
Post.objects.filter(title__contains='百合子')
titleの次は_が二つです。