0001-manager-add-view-to-edit-a-single-attribute-with-an-.patch
combo/manager/urls.py | ||
---|---|---|
126 | 126 |
views.page_duplicate_cell, |
127 | 127 |
name='combo-manager-page-duplicate-cell', |
128 | 128 |
), |
129 |
re_path( |
|
130 |
r'^pages/(?P<page_pk>\d+)/cell/(?P<cell_reference>[\w_-]+)/attribute/(?P<attribute>[\w_]+)/$', |
|
131 |
views.page_edit_cell_attribute, |
|
132 |
name='combo-manager-page-edit-cell-attribute', |
|
133 |
), |
|
129 | 134 |
re_path( |
130 | 135 |
r'^pages/(?P<page_pk>\d+)/cell/(?P<cell_reference>[\w_-]+)/add-link/(?P<link_code>[\w-]+)$', |
131 | 136 |
views.page_list_cell_add_link, |
combo/manager/views.py | ||
---|---|---|
868 | 868 |
page_duplicate_cell = PageDuplicateCellView.as_view() |
869 | 869 | |
870 | 870 | |
871 |
class PageEditCellAttributeView(ManagedPageMixin, UpdateView): |
|
872 |
http_method_names = ['post'] |
|
873 | ||
874 |
def get_object(self, queryset=None): |
|
875 |
page_pk = self.kwargs.get('page_pk') |
|
876 |
cell_reference = self.kwargs.get('cell_reference') |
|
877 |
try: |
|
878 |
return CellBase.get_cell(cell_reference, page_id=page_pk) |
|
879 |
except ObjectDoesNotExist: |
|
880 |
raise Http404() |
|
881 | ||
882 |
def post(self, request, *args, **kwargs): |
|
883 |
self.object = self.get_object() |
|
884 |
attr = kwargs['attribute'] |
|
885 | ||
886 |
form_class = forms.models.modelform_factory( |
|
887 |
self.object.__class__, |
|
888 |
fields=[attr], |
|
889 |
) |
|
890 |
form = form_class(**self.get_form_kwargs()) |
|
891 |
response = {} |
|
892 |
if form.is_valid(): |
|
893 |
response['err'] = 0 |
|
894 |
self.object = form.save() |
|
895 |
PageSnapshot.take( |
|
896 |
self.object.page, |
|
897 |
request=self.request, |
|
898 |
comment=_('changed cell "%(cell)s" (attribute: %(attr)s)') |
|
899 |
% { |
|
900 |
'cell': self.object, |
|
901 |
'attr': attr, |
|
902 |
}, |
|
903 |
) |
|
904 |
else: |
|
905 |
response['err'] = 1 |
|
906 |
response['errorlist'] = form.errors |
|
907 | ||
908 |
return JsonResponse(response) |
|
909 | ||
910 | ||
911 |
page_edit_cell_attribute = PageEditCellAttributeView.as_view() |
|
912 | ||
913 | ||
871 | 914 |
class PageCellOrder(ManagedPageMixin, View): |
872 | 915 |
def get(self, *args, **kwargs): |
873 | 916 |
request = self.request |
tests/test_manager.py | ||
---|---|---|
1636 | 1636 |
assert TextCell.objects.get(id=cell.id).order == new_order[i] |
1637 | 1637 | |
1638 | 1638 | |
1639 |
def test_edit_cell_attribute_ajax(settings, app, admin_user): |
|
1640 |
Page.objects.all().delete() |
|
1641 |
page = Page(title='One', slug='one', template_name='standard') |
|
1642 |
page.save() |
|
1643 |
cell = TextCell(page=page, placeholder='content', text='Foobar', order=0) |
|
1644 |
cell.save() |
|
1645 | ||
1646 |
app = login(app) |
|
1647 |
params = { |
|
1648 |
'text': 'new text', |
|
1649 |
} |
|
1650 |
app.post( |
|
1651 |
f'/manage/pages/{page.id}/cell/data_textcell-{cell.id}/attribute/text/', params=params, status=403 |
|
1652 |
) |
|
1653 | ||
1654 |
resp = app.get(f'/manage/pages/{page.id}/') |
|
1655 |
params = { |
|
1656 |
'text': 'new text', |
|
1657 |
'csrfmiddlewaretoken': PyQuery(resp.text).find('[name=csrfmiddlewaretoken]').val(), |
|
1658 |
} |
|
1659 |
resp = app.post(f'/manage/pages/{page.id}/cell/data_textcell-{cell.id}/attribute/text/', params=params) |
|
1660 |
assert resp.json == {'err': 0} |
|
1661 |
assert TextCell.objects.get(id=cell.id).text == 'new text' |
|
1662 | ||
1663 |
params = { |
|
1664 |
'placeholder': '', |
|
1665 |
'csrfmiddlewaretoken': params['csrfmiddlewaretoken'], |
|
1666 |
} |
|
1667 |
resp = app.post( |
|
1668 |
f'/manage/pages/{page.id}/cell/data_textcell-{cell.id}/attribute/placeholder/', params=params |
|
1669 |
) |
|
1670 |
assert resp.json == {'err': 1, 'errorlist': {'placeholder': ['This field is required.']}} |
|
1671 | ||
1672 | ||
1639 | 1673 |
def test_edit_text_cell(app, admin_user): |
1640 | 1674 |
Page.objects.all().delete() |
1641 | 1675 |
page = Page(title='One', slug='one', template_name='standard') |
1642 |
- |