0002-page-form-to-add-a-child-37200.patch
combo/manager/templates/combo/page_view.html | ||
---|---|---|
11 | 11 |
<ul class="extra-actions-menu"> |
12 | 12 |
<li><a href="{% url 'combo-manager-page-history' pk=object.id %}">{% trans 'history' %}</a></li> |
13 | 13 |
<li><a download href="{% url 'combo-manager-page-export' pk=object.id %}">{% trans 'export' %}</a></li> |
14 |
<li><a rel="popup" href="{% url 'combo-manager-page-add-child' pk=object.id %}">{% trans 'add a child page' %}</a></li> |
|
14 | 15 |
<li><a rel="popup" href="{% url 'combo-manager-page-delete' pk=object.id %}">{% trans 'delete' %}</a></li> |
15 | 16 |
</ul> |
16 | 17 |
</span> |
combo/manager/urls.py | ||
---|---|---|
53 | 53 |
name='combo-manager-page-delete'), |
54 | 54 |
url(r'^pages/(?P<pk>\w+)/export$', views.page_export, |
55 | 55 |
name='combo-manager-page-export'), |
56 |
url(r'^pages/(?P<pk>\w+)/add/$', views.page_add_child, name='combo-manager-page-add-child'), |
|
56 | 57 |
url(r'^pages/(?P<pk>\w+)/history$', views.page_history, |
57 | 58 |
name='combo-manager-page-history'), |
58 | 59 |
url(r'^pages/(?P<page_pk>\w+)/history/(?P<pk>\w+)/$', views.snapshot_restore, |
combo/manager/views.py | ||
---|---|---|
24 | 24 |
from django.core.urlresolvers import reverse, reverse_lazy |
25 | 25 |
from django.http import HttpResponse, HttpResponseRedirect, Http404 |
26 | 26 |
from django.shortcuts import redirect |
27 |
from django.shortcuts import get_object_or_404 |
|
27 | 28 |
from django.utils.translation import ugettext_lazy as _ |
28 | 29 |
from django.utils.encoding import force_text, force_bytes |
29 | 30 |
from django.utils.formats import date_format |
... | ... | |
97 | 98 | |
98 | 99 |
def get_initial(self): |
99 | 100 |
initial = super(PageAddView, self).get_initial() |
100 |
if Page.objects.count() == 0: # first page
|
|
101 |
if not Page.objects.exists(): # first page
|
|
101 | 102 |
initial['title'] = _('Home') |
102 | 103 |
return initial |
103 | 104 | |
... | ... | |
117 | 118 |
page_add = PageAddView.as_view() |
118 | 119 | |
119 | 120 | |
121 |
class PageAddChildView(PageAddView): |
|
122 |
def get_initial(self): |
|
123 |
# it can not be the first page, so don't try to initial the title |
|
124 |
return super(CreateView, self).get_initial() |
|
125 | ||
126 |
def dispatch(self, request, *args, **kwargs): |
|
127 |
print(request.POST) |
|
128 |
self.parent = get_object_or_404(Page, pk=kwargs['pk']) |
|
129 |
return super(PageAddChildView, self).dispatch(request, *args, **kwargs) |
|
130 | ||
131 |
def form_valid(self, form): |
|
132 |
response = super(PageAddChildView, self).form_valid(form) |
|
133 |
self.object.parent = self.parent |
|
134 |
self.object.save() |
|
135 |
return response |
|
136 | ||
137 | ||
138 |
page_add_child = PageAddChildView.as_view() |
|
139 | ||
140 | ||
120 | 141 |
class PageEditView(UpdateView): |
121 | 142 |
model = Page |
122 | 143 |
template_name = 'combo/page_add.html' |
tests/test_manager.py | ||
---|---|---|
73 | 73 |
resp = resp.forms[0].submit() |
74 | 74 |
assert Page.objects.get(slug='foobar').title == 'Foobar' |
75 | 75 | |
76 | ||
77 |
def test_add_child_page(app, admin_user): |
|
78 |
page = Page(title='One', slug='one') |
|
79 |
page.save() |
|
80 |
app = login(app) |
|
81 |
resp = app.get('/manage/pages/%s/' % page.pk, status=200) |
|
82 |
resp = resp.click(href='.*/add/') |
|
83 |
resp.forms[0]['title'].value = 'Two' |
|
84 |
resp = resp.forms[0].submit() |
|
85 |
child = Page.objects.latest('pk') |
|
86 |
assert resp.location.endswith('/manage/pages/%s/' % child.pk) |
|
87 |
assert child.title == 'Two' |
|
88 |
assert child.parent == page |
|
89 | ||
90 |
app.get('/manage/pages/%s/add/' % child.pk, status=200) |
|
91 |
app.get('/manage/pages/42/add/', status=404) |
|
92 | ||
93 | ||
76 | 94 |
def test_edit_page(app, admin_user): |
77 | 95 |
Page.objects.all().delete() |
78 | 96 |
app = login(app) |
79 |
- |