Skip to content

Commit fdc9f49

Browse files
authored
feat: Removing slug field and hyperlink from list display when versioning is enabled (#98)
1 parent b0a0559 commit fdc9f49

File tree

3 files changed

+64
-6
lines changed

3 files changed

+64
-6
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Changelog
55
Unreleased
66
==========
77

8+
* fix: Slug field on list display for admin should only be displayed when versioning is not available
89

910
4.0.0.dev2 (2021-12-22)
1011
=======================

djangocms_snippet/admin.py

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,15 @@
1818

1919
try:
2020
from djangocms_versioning.admin import ExtendedVersionAdminMixin
21-
2221
if djangocms_versioning_enabled:
2322
snippet_admin_classes.insert(0, ExtendedVersionAdminMixin)
2423
except ImportError:
25-
pass
24+
djangocms_versioning_enabled = False
2625

2726

2827
class SnippetAdmin(*snippet_admin_classes):
29-
list_display = ('slug', 'name')
30-
search_fields = ['slug', 'name']
31-
prepopulated_fields = {'slug': ('name',)}
28+
list_display = ('name',)
29+
search_fields = ['name']
3230
change_form_template = 'djangocms_snippet/admin/change_form.html'
3331
text_area_attrs = {
3432
'rows': 20,
@@ -46,6 +44,35 @@ class SnippetAdmin(*snippet_admin_classes):
4644
class Meta:
4745
model = Snippet
4846

47+
def get_list_display(self, request):
48+
list_display = super().get_list_display(request)
49+
list_display = list(list_display)
50+
51+
if not djangocms_versioning_enabled:
52+
list_display.insert(0, 'slug')
53+
54+
list_display = tuple(list_display)
55+
return list_display
56+
57+
def get_search_fields(self, request):
58+
search_fields = super().get_search_fields(request)
59+
if not djangocms_versioning_enabled:
60+
search_fields.append('slug')
61+
return search_fields
62+
63+
def get_prepopulated_fields(self, obj, request):
64+
prepopulated_fields = super().get_prepopulated_fields(request)
65+
if not djangocms_versioning_enabled:
66+
prepopulated_fields = {'slug': ('name',)}
67+
return prepopulated_fields
68+
69+
def get_list_display_links(self, request, list_display):
70+
if not djangocms_versioning_enabled:
71+
return list(list_display)[:1]
72+
else:
73+
self.list_display_links = (None,)
74+
return self.list_display_links
75+
4976
def get_urls(self):
5077
info = self.model._meta.app_label, self.model._meta.model_name
5178
return [

tests/test_admin.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def test_admin_list_display_with_versioning(self):
5959
self.snippet_admin.__class__.__bases__, (ExtendedVersionAdminMixin, admin.ModelAdmin)
6060
)
6161
self.assertEqual(
62-
list_display[:-1], ('slug', 'name', 'get_author', 'get_modified_date', 'get_versioning_state')
62+
list_display[:-1], ('name', 'get_author', 'get_modified_date', 'get_versioning_state')
6363
)
6464
self.assertEqual(list_display[-1].short_description, 'actions')
6565
self.assertIn("function ExtendedVersionAdminMixin._list_actions", list_display[-1].__str__())
@@ -179,3 +179,33 @@ def test_admin_form_edit_when_locked(self):
179179
self.assertContains(response, '<div class="readonly">Test Snippet</div>')
180180
# We should have the same number of snippets as before
181181
self.assertEqual(Snippet.objects.count(), 1)
182+
183+
@override_settings(DJANGOCMS_SNIPPET_VERSIONING_ENABLED=False)
184+
def test_slug_colomn_should_hyperlinked_with_versioning_disabled(self):
185+
"""
186+
Slug column should be visible and hyperlinked when versioning is disabled
187+
"""
188+
admin.site.unregister(Snippet)
189+
reload(cms_config)
190+
reload(snippet_admin)
191+
192+
with self.login_user_context(self.get_superuser()):
193+
response = self.client.get(self.changelist_url)
194+
self.assertContains(response, '<th class="field-slug"><a href="/en/admin/djangocms_snippet/'
195+
'snippet/1/change/">test-snippet</a></th>')
196+
197+
@override_settings(DJANGOCMS_SNIPPET_VERSIONING_ENABLED=True)
198+
def test_name_colomn_should_not_be_hyperlinked_with_versioning_enabled(self):
199+
"""
200+
Name column should be visible and not hyperlinked when versioning is enabled.
201+
Slug column should not be visible when versioning is enabled.
202+
"""
203+
admin.site.unregister(Snippet)
204+
reload(cms_config)
205+
reload(snippet_admin)
206+
207+
with self.login_user_context(self.get_superuser()):
208+
response = self.client.get(self.changelist_url)
209+
self.assertContains(response, '<td class="field-name">Test Snippet</td>')
210+
self.assertNotContains(response, '<th class="field-slug"><a href="/en/admin/djangocms_snippet/'
211+
'snippet/1/change/">test-snippet</a></th>')

0 commit comments

Comments
 (0)