From b7b06cbd582059dd382a6fcbcac28cac1eb44f32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laur=C3=A9line=20Gu=C3=A9rin?= Date: Mon, 28 Oct 2019 08:58:22 +0100 Subject: [PATCH] page: form to add a child (#37200) --- combo/manager/templates/combo/page_view.html | 1 + combo/manager/urls.py | 1 + combo/manager/views.py | 23 +++++++++++++++++++- tests/test_manager.py | 18 +++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/combo/manager/templates/combo/page_view.html b/combo/manager/templates/combo/page_view.html index c1fa61fe..67f91bae 100644 --- a/combo/manager/templates/combo/page_view.html +++ b/combo/manager/templates/combo/page_view.html @@ -11,6 +11,7 @@ diff --git a/combo/manager/urls.py b/combo/manager/urls.py index 23c1a8df..a99f99ec 100644 --- a/combo/manager/urls.py +++ b/combo/manager/urls.py @@ -53,6 +53,7 @@ urlpatterns = [ name='combo-manager-page-delete'), url(r'^pages/(?P\w+)/export$', views.page_export, name='combo-manager-page-export'), + url(r'^pages/(?P\w+)/add/$', views.page_add_child, name='combo-manager-page-add-child'), url(r'^pages/(?P\w+)/history$', views.page_history, name='combo-manager-page-history'), url(r'^pages/(?P\w+)/history/(?P\w+)/$', views.snapshot_restore, diff --git a/combo/manager/views.py b/combo/manager/views.py index 6b051ba1..3633c7ef 100644 --- a/combo/manager/views.py +++ b/combo/manager/views.py @@ -24,6 +24,7 @@ from django.core.exceptions import ObjectDoesNotExist, PermissionDenied from django.core.urlresolvers import reverse, reverse_lazy from django.http import HttpResponse, HttpResponseRedirect, Http404 from django.shortcuts import redirect +from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext_lazy as _ from django.utils.encoding import force_text, force_bytes from django.utils.formats import date_format @@ -97,7 +98,7 @@ class PageAddView(CreateView): def get_initial(self): initial = super(PageAddView, self).get_initial() - if Page.objects.count() == 0: # first page + if not Page.objects.exists(): # first page initial['title'] = _('Home') return initial @@ -117,6 +118,26 @@ class PageAddView(CreateView): page_add = PageAddView.as_view() +class PageAddChildView(PageAddView): + def get_initial(self): + # it can not be the first page, so don't try to initial the title + return super(CreateView, self).get_initial() + + def dispatch(self, request, *args, **kwargs): + print(request.POST) + self.parent = get_object_or_404(Page, pk=kwargs['pk']) + return super(PageAddChildView, self).dispatch(request, *args, **kwargs) + + def form_valid(self, form): + response = super(PageAddChildView, self).form_valid(form) + self.object.parent = self.parent + self.object.save() + return response + + +page_add_child = PageAddChildView.as_view() + + class PageEditView(UpdateView): model = Page template_name = 'combo/page_add.html' diff --git a/tests/test_manager.py b/tests/test_manager.py index 136e8f91..3cb0ecd1 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -73,6 +73,24 @@ def test_add_second_page(app, admin_user): resp = resp.forms[0].submit() assert Page.objects.get(slug='foobar').title == 'Foobar' + +def test_add_child_page(app, admin_user): + page = Page(title='One', slug='one') + page.save() + app = login(app) + resp = app.get('/manage/pages/%s/' % page.pk, status=200) + resp = resp.click(href='.*/add/') + resp.forms[0]['title'].value = 'Two' + resp = resp.forms[0].submit() + child = Page.objects.latest('pk') + assert resp.location.endswith('/manage/pages/%s/' % child.pk) + assert child.title == 'Two' + assert child.parent == page + + app.get('/manage/pages/%s/add/' % child.pk, status=200) + app.get('/manage/pages/42/add/', status=404) + + def test_edit_page(app, admin_user): Page.objects.all().delete() app = login(app)