はじめに
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 にアクセスします。
値を入力し、Createボタンを押します。
追加されたレコードがDetailに表示されます。
まとめ
長くなったので、続きます。
[Django] Generic editing viewsについて [2]
最後に
これは2015 tech-yuruyuru アドベントカレンダーの10日目の記事です。