diff --git a/AUTHORS b/AUTHORS index e3b30fc..27ef03c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -8,6 +8,7 @@ Dan Poirier David Burke Florian Apolloner Igor Támara +Ilya Chichak Jake Merdich Jannis Leidel Janusz Harkot diff --git a/constance/admin.py b/constance/admin.py index 70f0d37..3debb6e 100644 --- a/constance/admin.py +++ b/constance/admin.py @@ -250,7 +250,14 @@ class ConstanceAdmin(admin.ModelAdmin): if settings.CONFIG_FIELDSETS: context['fieldsets'] = [] - for fieldset_title, fields_list in settings.CONFIG_FIELDSETS.items(): + for fieldset_title, fieldset_data in settings.CONFIG_FIELDSETS.items(): + if type(fieldset_data) == dict: + fields_list = fieldset_data['fields'] + collapse = fieldset_data.get('collapse', False) + else: + fields_list = fieldset_data + collapse = False + absent_fields = [field for field in fields_list if field not in settings.CONFIG] assert not any(absent_fields), ( @@ -265,11 +272,14 @@ class ConstanceAdmin(admin.ModelAdmin): config_values.append( self.get_config_value(name, options, form, initial) ) - - context['fieldsets'].append({ + fieldset_context = { 'title': fieldset_title, 'config_values': config_values - }) + } + + if collapse: + fieldset_context['collapse'] = True + context['fieldsets'].append(fieldset_context) if not isinstance(settings.CONFIG_FIELDSETS, OrderedDict): context['fieldsets'].sort(key=itemgetter('title')) diff --git a/constance/templates/admin/constance/change_list.html b/constance/templates/admin/constance/change_list.html index 6b45032..0ab2854 100644 --- a/constance/templates/admin/constance/change_list.html +++ b/constance/templates/admin/constance/change_list.html @@ -15,6 +15,7 @@ {{ block.super }} {{ media.js }} + {% endblock %} {% block bodyclass %}change-list{% endblock %} @@ -45,7 +46,7 @@ {% if fieldsets %} {% for fieldset in fieldsets %} -
+

{{ fieldset.title }}

{% with config_values=fieldset.config_values %} {% include "admin/constance/includes/results_list.html" %} diff --git a/docs/index.rst b/docs/index.rst index f14a2a4..5b112cd 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -192,6 +192,28 @@ You can define fieldsets to group settings together: .. image:: screenshot3.png + +Fieldsets collapsing +-------------------- + +To make some fieldsets collapsing you can use new format if CONSTANCE_CONFIG_FIELDSETS. Here's an example: + +.. code-block:: python + + CONSTANCE_CONFIG = { + 'SITE_NAME': ('My Title', 'Website title'), + 'SITE_DESCRIPTION': ('', 'Website description'), + 'THEME': ('light-blue', 'Website theme'), + } + + CONSTANCE_CONFIG_FIELDSETS = { + 'General Options': { + 'fields': ('SITE_NAME', 'SITE_DESCRIPTION'), + 'collapse': True + }, + 'Theme Options': ('THEME',), + } + Usage ----- diff --git a/tests/test_admin.py b/tests/test_admin.py index a26bb59..6b13538 100644 --- a/tests/test_admin.py +++ b/tests/test_admin.py @@ -76,6 +76,23 @@ class TestAdmin(TestCase): self.assertContains(response, '

Numbers

') self.assertContains(response, '

Text

') + @mock.patch('constance.settings.CONFIG_FIELDSETS', { + 'Numbers': { + 'fields': ('INT_VALUE', 'DECIMAL_VALUE',), + 'collapse': True, + }, + 'Text': { + 'fields': ('STRING_VALUE', 'LINEBREAK_VALUE',), + 'collapse': True, + }, + }) + def test_collapsed_fieldsets(self): + self.client.login(username='admin', password='nimda') + request = self.rf.get('/admin/constance/config/') + request.user = self.superuser + response = self.options.changelist_view(request, {}) + self.assertContains(response, 'module collapse') + @mock.patch('constance.settings.CONFIG_FIELDSETS', { 'FieldSetOne': ('INT_VALUE',) })