DjangoのFormから送信したデータを登録する
DjangoでFormでは、画面からPOSTリクエストを送信し、モデルと連携してデータを登録することもできる
以下のような流れで処理を定義する
- モデルの作成(models.py)
- フォームでモデルのインスタンスを定義(forms.py)
- ビューからテンプレートにフォームを渡して、POST時に登録するように記述する(views.py)
- テンプレートにForm送信画面を作成(user.html)
- models.py(モデルの定義)
class User(models.Model):
first_name = models.CharField(max_length=128)
last_name = models.CharField(max_length=128)
email = models.EmailField(max_length=264, unique=True)
age = models.IntegerField(default=0)
- forms.py(フォームの定義)
from app.models import User
class NewUserForm(forms.ModelForm): ModelFormを継承
class Meta():
model = User # モデルのインスタンスを生成
fields = '__all__' # fieldsに__all__をセットすると、モデル内の全てのフィールドをフォームのフィールドに用いる
- views.py(ビューの定義)
from app.models import User
from app.forms import NewUserForm
def users(request): # form登録用のビュー
form = NewUserForm(request.POST or None) # formのインスタンス作成
if form.is_valid():
form.save(commit=True) # form.saveとするとデータが登録される
else:
print('ERROR FORM INVALID')
return render(request, 'app/user.html', {'form': form})
- user.html
<html>
<head>
<meta charset="utf-8">
<title>
</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<h1>Please sign up here</h1>
<div class="container">
<div class="jumbotron">
<h1>welcome</h1>
<form method="POST">
{{ form.as_p }}
{% csrf_token %}
<input type="submit" class="btn btn-primary" value="Submit">
</form>
</div>
</div>
</body>
</html>
画面上には、以下のように表示される
送信をした結果、画面に以下のようにユーザ情報が登録される。