電子工作作業報告書管理アプリその17
ビュー関数から
#user/views.py #動作に問題なければewrnフォルダのuserにぶち込む #21行目のif form.is_valid()メソッドでDataFormモデルのバリデーションが実行される #問題ない場合は、save()メソッドでデータが保存され、user/data2へリダイレクトされる #30行目のparams['form'] = form各フィールドのエラーメッセージ「このメッセージは必須です]などの #テンプレートに表示させる為のformインスタンスを渡している #動作確認日:2022-1-?? from django.shortcuts import render, redirect from .forms import DataForm from .models import Input_data def data(request): params = {'message': '', 'form': None} if request.method== 'POST': form = DataForm(request.POST) if form.is_valid(): form.save() return redirect('data2') else: params['message'] = '再入力して下さい' params['form'] = form else: params['form'] = DataForm() return render(request, 'user/data.html', params) def list(request): data = Input_data.objects.all() params = {'message':'データ入力画面2', 'data': data} return render(request, 'user/data2.html', params)
<!--data.htmlはデータ入力画面1--> <!--ewrn/templates/user/data.html--> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>データ入力画面1フォーム</title> </head> <body> <h1>データ入力画面1フォーム</h1> <form method="POST" novalidate> {{ form.as_p }} <!-- フォーム内容がすべて表示される--> {% csrf_token %} <!-- この記述がないとエラーになる --> <button type="submit">入力画面2へ</button> <button type="clear">クリア</button> </form> <p>{{ message }}</p> </body> </html>
<!--data2.htmlはリダイレクト先のテンプレート--> <!--ewrn/templates/user/data2.html--> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>データ入力画面2フォーム</title> </head> <body> <h1>データ入力画面2フォーム</h1> <p>{{ message }}</p> <table border="1"> <tr> <th>name</th> <th>age</th> </tr> {% for member in data %} <tr> <td>{{ member.task_name }}</td> <td>{{ member.age }}</td> </tr> {% endfor %} </table> </body> </html>
from django.urls import path from . import views urlpatterns = [ path('data/', views.data, name ='data'), path('data2/', views.data2, name = 'data2'), ]
次回はモデルのフィールドオプションの解説などを行う