libro
www.tuyano.com
初心者のためのDjango 2.0入門

CRUDをマスターしよう (4/6)

作成:2018-01-21 09:30
更新:2018-01-21 09:30

■更新(Update)について

続いて、Update(更新)です。レコードの更新を行う場合、新規作成よりも一つ作業が増えます。すなわち、

1. 更新するレコードのモデルインスタンスを用意する。
2. 値を書き換える。
3. モデルインスタンスを保存する。

こんな形になるのです。つまり、あらかじめ「どのレコードを書き換えるのか」を指定して、そのレコードをモデルインスタンスとして用意しておく必要があるわけですね。

ではサンプルとして、URLでIDのパラメータを送って更新するレコードを指定する処理を考えてみましょう。例えば、/hello/update/1 とアクセスすると、ID=1のレコードがフォームに表示される。これを編集して送信すると、そのレコードが更新される。そんな形ですね。


■update.htmlテンプレートを用意する

まず、テンプレートを用意しましょう。今回は、updateというアクションとして作成します。「hello」内の「templates」内にある「hello」フォルダ内にupdate.htmlというファイルを用意して下さい。そして、下のリスト欄のように記述をしておきます。

ここでは、以下のような形でフォームを用意しています。
<form action="/hello/update/{{current.id}}" method="post">
/hello/update/番号 というアドレスにフォームを送信していますね。こんな具合に、ID番号をURLにパラメータとして追加してアクセスできるようにしましょう。
そのためには? そう、hello/urls.pyを編集する必要がありましたね。urlpatterns配列に、以下の値を追加しておいて下さい。
path('update/<int:id>', views.update, name='update'),
これで、/update/番号 とアクセスをしたらupdateメソッドが呼び出されるようになりました。後は、views.py内にupdate関数を用意して、/hello/update/番号 へのアクセス処理を行うようにすればいいわけですね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

{% load static %}
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>hello/update</title>
    <link rel="stylesheet" type="text/css" 
        href="{% static 'hello/style.css' %}" />
</head>
<body>
    <h1>hello/update</h1>
    <p>{{msg}}</p>
    <form action="/hello/update/{{current.id}}" method="post">
        {% csrf_token %}
        <table>
        <tr>
        <th><label for="name">name: </label></th>
        <td><input id="name" type="text" name="name" 
            value="{{current.name}}"></td>
        </tr>
        <tr>
        <th><label for="mail">mail: </label></th>
        <td><input id="mail" type="text" name="mail" 
            value="{{current.mail}}"></td>
        </tr>
        <tr>
        <th><label for="age">age: </label></th>
        <td><input id="age" type="number" name="age" 
            value="{{current.age}}"></td>
        </tr>
        <tr>
        <th></th>
        <td><input type="submit" value="OK"></td>
        </tr>
        </table>
    </form>
</body>
</html>
※関連コンテンツ

「初心者のためのDjango 2.0入門」に戻る