Djangoでアプリ作成〜体重管理アプリ編8〜
こんにちは、こちょすです。最近仕事がばたついていて、なかなかnoteを書く時間が取れないのですが、少しずつ書いていきます!💪
今回もゆるーく頑張っていきましょーう🔥
前回までの復習
前回までは、ユーザからの入力を受付け、その入力された内容をDBに登録するところまでの実装をしました。
ポイントとしては、add関数は最初のページ読み込みの時にも、登録ボタン押した時にも呼ばれるので、どのタイミングでadd関数が呼ばれているのかを確認して、それに応じた処理を追加する必要があるのでした。
今回は、登録した内容を表示する、一覧画面の実装をしていきましょう💪
add関数にて、form.save()のあとにはredirectでindexページへ遷移するように定義していたので、今回変更するのは、index関数です!
index関数の修正
登録ボタンを押下して登録が正常にできたとき、次に実行するのはredirectでのindex関数呼び出しです。
というわけで、views.pyのindex関数を修正しましょう!
登録画面ではform.save()という形でデータの登録をしたわけですが、一覧画面でやりたいことはもちろん、
「登録されているデータを取得すること」です。
そのためにはDayオブジェクトが持つ、objects.all()関数を使いましょう!この関数を使うことで、DBに保存されている全てのDayオブジェクト(つまり全ての登録レコード)が取得できます。
SQLのほうがわかりやすいよーっていう人向けには、
select * from Dayテーブル;
です。もちろん条件を指定して抽出(where句)もできますが、それは応用編ということでここでは割愛しますので、やりたい方は調べてみてくださいね!
ということで、修正内容はシンプルにこんな感じ!
やりたいことがわかるようになってきた人もいるかもしれませんね!わからない人も焦る必要はないです!解説していきます!🔥
追加したのは黄色い箇所。
まずはmodels.pyからDayクラスをインポートします。
そしてindex関数の修正。ここでDay.objects.all()で全件取得し、それを「 day_list」という項目にセットしています。それをcontextとしてまとめ、render関数でday_list.htmlを呼び出すときに併せて渡しています。
ということで、次にやりたいことはなんだと思いますか???
、、、、そう!day_list.html側の修正です。受け取ったcontextの中から、day_listを取り出してDBの中身をhtmlに表示してみましょー💪
こんな感じ!この{% for day in day_list %}〜{% endfor %}がポイントですね!(というかそこしか追加してない)
for文はpythonの構文で、繰り返しをしたいときに使います。
ここでやっているのは、先ほど受け取ったday_listの中から、Dayオブジェクトを1つずつ取り出し、dayという関数に入れます。dayのdateという項目をh2タグで囲って表示することを繰り返しています。
ではこれで、登録〜一覧表示の機能がそろったので、一旦途中経過をサーバ起動してみてみましょうか!
selfrecord/addにアクセスして、、、
入力項目に入力して、、、
送信ボタンを押下!
おっけい!ちゃんと出力されましたね!!👏👏👏
今はdateしか出していませんが、次回は体重と体脂肪も出して、シンプルすぎるこの見た目を少し綺麗にしていきましょう!🔥💪
というわけで今日はここまで!今回も最後までご覧いただきありがとうございました!引き続き頑張って書きますので、お付き合いくださいー🙇
ツイッターもやっています。エンジニア向けに、最新のお役立ち情報を発信していくので、ぜひフォローお願いします!
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?