【django】データベース内にレコードを作成する

 

こんにちは。のっくんです。

 

今日の記事では、Djangoでデータベースにレコードを作成する方法をご紹介します。

 

概要

 

今回の記事では、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ページに飛ばしています。

 

以上です。皆さんの学習の手助けになれば嬉しいです。

 

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog