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

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

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

■指定のIDのレコードを更新する

では、/update/番号 へのアクセス処理を作成しましょう。hello/views.pyを開き、下のリスト欄のようにupdate関数を追記して下さい。
urlpatternsに、'update/<int:id>' という形でパターンを追加してありました。update関数を見ると、こんな具合に定義されています。
def update(request, id):
/update/番号 でアクセスした時の番号が、そのままidというパラメータとして渡されるようになっています。これをもとに、指定のID番号のPersonを変数currentに取り出しておきます。
current = Person.objects.get(id=id)
objects.getは、既に説明しましたね。これで指定のIDのレコードをPersonインスタンスとして用意できました。後は、送信されたフォームの値を使ってインスタンスのプロパティを更新し、保存するだけです。
current.name = request.POST['name']
current.mail = request.POST['mail']
current.age = request.POST['age']
current.save()
既にあるレコードを更新する場合も、新規保存と同じ「save」を使います。これで、更新されたレコードが保存できました!


■リダイレクトについて

今回の更新処理では、保存後、indexへとリダイレクトしています。これを行っているのが以下の文です。
return redirect('index')
redirectは、リダイレクトのHttpResponseを返すショートカット関数です。このredirect関数の戻り値をそのままreturnすることで、リダイレクトを実行できます。redirect関数の引数には、リダイレクト先を指定します。

このredirectは、django.shortcutsに用意されているものですので、利用の際には以下のようにimport文を追記しておいて下さい。
from django.shortcuts import redirect 

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

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

●プログラム・リスト●

from django.shortcuts import redirect #追加
def update(request, id):
    current = Person.objects.get(id=id)
    if request.method == 'POST':
        current.name = request.POST['name']
        current.mail = request.POST['mail']
        current.age = request.POST['age']
        current.save()
        return redirect('index')
    context = {
        'current': current,
        'msg': 'Person ID=' + str(id) + 'の更新',
    }
    return render(request, 'hello/update.html', context)

※関連コンテンツ

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