こんにちは。のっくんです。
今日の記事では、Djangoでデータベースにレコードを作成する方法をご紹介します。
[toc]
概要
今回の記事では、Pythonのdjangoというフレームワークを使ってデータベースを操作するwebアプリを作ります。
使っているバージョンは以下の通りです。
- Python 3.6
- django 2.1
データベースにはCRUDという概念があります。
Create(作成)、Read(読み出し)、Update(更新)、Delete(削除)です。
ReadはUpdateしたりDeleteする時に使うものなので、ユーザから見るとCreate:作成、Update:更新、Delete:削除の3つの操作となります。
今回はCreate:作成を作ってみましょう。
モデル
モデルというのは、データベースのカラムを定めるためのものです。モデルを使って、各カラムの変数名や文字列か数値などの属性を定義します。
今回の例では、名前、メールアドレス、性別、年齢、誕生日を定義します。
models.py
from django.db import models # Create your models here. class Friend(models.Model): name = models.CharField(max_length=100) mail = models.EmailField(max_length=200) gender = models.BooleanField() age = models.IntegerField(default=0) birthday = models.DateField() def __str__(self): return '<Friend:id =' + str(self.id) + ',' + self.name + '(' + str(self.age) + ')>'
フォームの作成
djangoのModelFormを使って、データを入力するためのフォームを下記のように作ります。
forms.py
from django import forms from .models import Friend class FriendForm(forms.ModelForm): class Meta: model = Friend fields = ['name', 'mail', 'gender', 'age', 'birthday']
ビュー
定義したフォームをビューの中で使用します。
views.py
from django.shortcuts import render from .forms import FriendForm from .models import Friend from django.shortcuts import redirect def index(request): data = Friend.objects.all() params = { 'title': 'Hello', 'data': data } return render(request, 'hello/index.html', params) def create(request): if request.method == 'POST': obj = Friend() friend = FriendForm(request.POST, instance=obj) friend.save() return redirect(to='/hello') params = { 'title': 'Hello', 'form': FriendForm(), } return render(request, 'hello/create.html', params)
index関数では、全レコードを取得しています。
create関数では、ユーザがcreate.htmlにアクセスした時の処理が書かれています。
ブラウザでhello/create.htmlにアクセスすると、GETメソッドが使われます。ですので最初のif文には入らず最後のrender関数の処理によってcreateページが表示されます。
if文の中の処理は、データが投稿(POST)された時に実行されます。この中では、フォームに記載されたデータと新規に作成したFriendインスタンスをFriendFormに渡します。FriendFormのインスタンスがsaveを実行することで、新しいレコードがデータベースに追加されます。
createページの作成
それでは、createページを作っていきましょう。このページでは、1.データを入力するためのフォームを表示する、2.投稿するの機能を持たせる必要があります。
create.html
{% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{ title }}</title> <link rel="stylesheet" type="text/css" href="{% static 'hello/css/style.css' %}"> </head> <body> <h1>{{ title }}</h1> <table> <form action="{% url 'create' %}" method="post"> {% csrf_token %} {{ form.as_table }} <tr><td></td><td><input type="submit" value="click"></td></tr> </form> </table> </body> </html>
ブラウザでアクセスすると以下のページが表示されます。

フォーム欄に内容を記載し、clickを押すとデータが投稿(POST)できます。
実行結果
試しに適当な値を入力して、データを投稿(POST)してみます。

id=5が新規に作成できました。
内部では、データが投稿されたらビューがデータベースに新しいレコードを作成します。そのあとにredirectを使って上記のindexページに飛ばしています。
以上です。皆さんの学習の手助けになれば嬉しいです。