Djangoでアプリ作成〜体重管理アプリ編11〜
こんにちは、こちょすです。最近家に空気清浄機を置きました。埃が苦手な僕ですが、これがあれば快適です!(掃除はもちろんやりますよ💪)
では今回も体重管理アプリ、作っていきましょう!
前回までの復習
前回の最後に更新機能のurls.pyの追加までやりました。更新の場合、すでに存在しているレコードに対して処理を行うので、その対象を特定するために、主キー(pk)を指定する必要があるのでしたね。
今回は具体的に、どうやってpkを受け渡すのか、pkを受け取ったらどのように処理をするのかについて書いていきたいと思います!🔥💪
今回も内容盛りだくさんですが、一緒に頑張っていきましょー❗️
更新処理(views.py)の実装
まずはpkを渡されて、そのレコードに対して更新する処理から作っていきましょう!💪
イメージ図でいうと、ここ!
まずは早速修正内容から出しますね!そのあと解説していきます🔥
^今回は結構書くことが多くて難しいです!!💦
ですが諦めないでください!1行ずつ解説していくので、最終的にわかるようになればそれでオッケーです👌
ではいきます。以下ではupdate関数内の行数(コメント行を除く)で書いていきます。
1行目(day = get_object_or_404(Day,pk=pk)):
これはデータベースを検索し、引数として受け取ったpkに一致するレコード(Dayオブジェクト)が存在しているか確認し、もし存在していればdayという変数にセットしています。もしなければ404エラー(not found)を返します。
更新処理なので、「このレコードを更新してね」というレコードが存在しているかをまず確認しているわけですね!💪
2行目(form = .....)
ここは、1行目で取得したDayオブジェクトを使って、formを生成しているところです。具体的な各項目の設定については、POST データを使ってフォームに値を設定しています。
このあたりの流れはDjangoの公式ドキュメントも色々なパターンで書かれていて比較的わかりやすいので、併せて見てみてくださいね🙏
3行目〜5行目(if request......)
ここは登録処理(add関数)と同じです!ポイントとしては.save()を使うことで、updateもできるというところですね!
イメージ的には、addの場合、「新規作成」、updateの場合、「上書き保存」といった感じです!
それ以降の処理はaddと全く同じなので大丈夫ですね!
ということで、これでviews.pyの更新処理は終わりです!👏
次はpkをviews.pyのupdate関数に渡すところを作って行きましょう💪🔥
一覧ページの修正
今回修正する処理のイメージはここ!
まずは更新時の作業をイメージしてください。ユーザとしてはまずは一覧画面から、更新したい明細を選択して、体重や体脂肪率を更新するはずです🔥
というわけで、一覧表示に更新リンクを設置し、その更新リンクをクリックした場合にupdate関数が呼ばれてその明細が更新できるようにしましょう!
文章で見ると難しそうに見えますが、Djangoの機能を使えば簡単に実装できますのでご安心を!
ではまずは修正内容から!修正するのは1行だけです!🎉👌
ここでaタグ(アンカータグ)というリンクを貼るためのタグを使います。
その中のhref属性に対して、リンク先のurlを書くわけですが、ここで再び登場、urlの逆引きです!これにより、selfrecord/updateへのリンクが貼れます!
。。。あれ?となった方は良い感じですね。そう、urls.pyで定義したのは「selfrecord/update/<int:pk>」というURLでした。
つまりこのままでは足りない!そのために書いているのが、selfrecord:updateのあとの 「day.pk」という部分です。これはdayオブジェクトのpkというわけですね。これで点と点が繋がりました!💪
整理すると今回の更新処理は以下のように呼ばれます!
1、一覧画面から更新処理をクリック
2、href属性により、urls.pyでselfrecord/update/pk(ここは明細のpk)が参照される
3、urls.pyでは上記のurlにはviews.update関数が紐づいているので、update関数が呼ばれる
4、update関数の中で、Dayオブジェクトがpkを元にデータベースから参照され、入力内容に従って、更新処理が行われる。
では実装は終わったので、実際に動くか見てみましょう!
一覧表示して、、、
今回は4/26の体重を58KGから、100KGにしてみましょう!(大胆な増量ですね笑)
なので4/26の明細の更新ボタンをクリックして、、、
ぱぱぱーん🎉👏(一発目)うまく4/26の明細を取得することができました!
この体重項目を100に更新して、、、
送信ボタンを押下!💪
ぱぱぱぱーん🎉👏(二発目)2明細目の体重に注目!うまく更新できていますね!
これで更新処理は実装できました!今回はここまでにしましょう!
これでCRUDでいうところの、C,R,Uは実装できました。残すはDELETEですね!次回、実装していきます!もう少しですので、お付き合いくださいませ🙏
ツイッターもやっています!エンジニア向けに有益な情報を発信しておりますので、ぜひフォローお願いします!🙇
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?