More than 1 year has passed since last update.

はじめに

Generic display viewsに続いて、新規追加、編集、削除を行うGeneric editing viewsについても見てみます。

Generic editing views

今回はGeneric editing viewsについてです。

最小限で

引き続き、最小限で実装します。Generic display viewsの続きからです。

CreateView

まずは新規追加です。

veiwには利用modelとfieldを指定します。

polls/view.py
from django.views.generic.edit import CreateView

class CreateQuestionView(CreateView):

    model = Question
    fields = ['question_text', 'pub_date']

モデルには追加後に表示するviewをget_absolute_urlに指定します。

polls/model
class Question(models.Model):

    [追加]
    def get_absolute_url(self):
        return reverse('polls:detail', kwargs={'pk': self.pk})

formはquestionというmodelの新規追加の場合は[model名]に_formをつけた名前のテンプレートを用意します。

templates/polls/question_form.html
<form action="" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Create" />
</form>

urls.pyに追加します。

polls/urls.py
from django.conf.urls import url

from . import views

app_name = 'polls'
urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
    url(r'^add$', views.CreateQuestionView.as_view(), name='add'),
]

http://127.0.0.1:8000/polls/add にアクセスします。

add2.png

値を入力し、Createボタンを押します。

add3.png

追加されたレコードがDetailに表示されます。

まとめ

長くなったので、続きます。
[Django] Generic editing viewsについて [2]

最後に

これは2015 tech-yuruyuru アドベントカレンダーの10日目の記事です。