[Django]Generic View(汎用ビュー)の使い方まとめ

DjangoGeneric Viewを使う機会があったので、使い方をまとめました。

Generic Viewを利用することでコーディング量を大幅に削減することができます。

バージョン情報

PythonDjangoのバージョンは下記の通りです。

  • Python 3.6.2
  • Django 2.0.7

下準備

Generic Viewを使うアプリを作成していきます。

これを読んだだけじゃアプリの作成方法がわからない場合は、下記の記事も参考にしてもらえればと思います。

プロジェクトを作成します。

$ django-admin startproject generic_view

Generic Viewを使うアプリケーションを作成します。

$ cd generic_view

$ python manage.py startapp sample

マイグレートします。

$ python manage.py migrate

settings.pyを編集します。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'sample.apps.SampleConfig',
]

Generic Viewを利用して操作したいモデルをsampleアプリケーションに追加します。

# models.py
from django.db import models


class Sample(models.Model):
    foo = models.CharField(max_length=100)
    bar = models.CharField(max_length=100)

makemigrationsしてmigrateします。

$ python manage.py makemigrations
$ python manage.py migrate

Generic Viewで利用するforms.pyを作成します。

from django import forms
from .models import Sample


class SampleForm(forms.ModelForm):
    class Meta:
        model = Sample
        fields = ['foo', 'bar']

これでGeneric Viewを使うための準備が出来ました。

Generic Viewを使う

今回は下記のGeneric Viewを使っていきたいと思います。

  • ListView
  • CreateView
  • UpdateView
  • DeleteView

これでCRUDの操作に対応できるようになります。

今回は主にviews.py部分の説明をおこなっていきたいと思います。

ListView

class SampleListView(ListView):
    model = Sample
    template_name = 'sample_list.html'

CreateView

class SampleCreateView(CreateView):
    form_class = SampleForm
    template_name = 'create.html'

UpdateView

class SampleUpdateView(UpdateView):
    model = Sample
    form_class = SampleForm
    template_name = 'update.html'

DeleteView

class SampleDeleteView(DeleteView):
    model = Sample

最後に

この記述だけで最低限のCRUDを実現することが出来ます。Generic Viewを利用することで劇的にコード量を削減できますので、積極的に活用していきたいと思います。