ryotankの備考録日記

趣味の電子工作についての備考録などなど

電子工作作業報告書管理アプリその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'),
]

次回はモデルのフィールドオプションの解説などを行う