/hello/forms.py
from django import forms class HelloForm(forms.Form): name = forms.CharField(label='Name', widget=forms.TextInput(attrs={'class':'form-control'})) mail = forms.EmailField(label='Email', widget=forms.EmailInput(attrs={'class':'form-control'})) gender = forms.BooleanField(label='Gender', widget=forms.CheckboxInput(attrs={'class':'form-check'})) age = forms.IntegerField(label='Age', widget=forms.NumberInput(attrs={'class':'form-control'})) birthday = forms.DateField(label='Birth', widget=forms.DateInput(attrs={'class':'form-control'}))
### create.htmlの作成
/hello/templates/hello/create.html
{% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{title}}</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" crossoorigin="anonymous"> </head> <body class="container"> <h1 class="display-4 text-primary">{{title}}</h1> <form action="{% url 'create' %}" method="post"> {% csrf_token %} {{ form.as_p }} <input type="submit" value="click" class="btn btn-primary mt-2"> </form> </body> </html>
/hello/templates/hello/index.html
<body class="container"> <h1 class="display-4 text-primary">{{title}}</h1> <table class="table"> <tr> <th>data</th> </tr> {% for item in data %} <tr> <td>{{item}}</td> </tr> {% endfor %} </table> </body>
/hello/views.py
from django.shortcuts import render from django.http import HttpResponse from django.shortcuts import redirect from .models import Friend from .forms import HelloForm def index(request): data = Friend.objects.all() params = { 'title': 'Hello', 'data': data, } return render(request, 'hello/index.html', params) # create model def create(request): params = { 'title': 'Hello', 'form': HelloForm(), } if(request.method == 'POST'): name = request.POST['name'] mail = request.POST['mail'] gender = 'gender' in request.POST age = int(request.POST['age']) birth = request.POST['birthday'] friend = Friend(name=name, mail=mail, gender=gender, age=age, birthday=birth) friend.save() return redirect(to='/hello') return render(request, 'hello/create.html', params)
– models.pyで定義しているFriendインスタンスを作成して、インスタンスを保存する
– return redirectでリダイレクト
/hello/urls.py
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('create', views.create, name='create'), ]
流れとしては、create.htmlからcreate.htmlにpostして、modelのインスタンスを使ってsave()してリダイレクトさせる
リダイレクト先で、if request.method == ‘POST’としても同じだろう。