From be65f6536a0a342d9eee2be7ecafcccd6a018979 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Tue, 14 Feb 2017 01:21:51 +0100 Subject: [PATCH] Add a `get_changelist_form` hook in the ModelAdmin This method is used in the `changelist_view` to get the changelist form. You may want to override this method to get a different form depending on the user that makes the request. For example: class MyConstanceAdmin(ConstanceAdmin): def get_changelist_form(self, request): if request.user.is_superuser: return SuperuserForm: else: return super(MyConstanceAdmin, self).get_changelist_form(request) --- constance/admin.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/constance/admin.py b/constance/admin.py index 6315364..c18ce5f 100644 --- a/constance/admin.py +++ b/constance/admin.py @@ -184,14 +184,23 @@ class ConstanceAdmin(admin.ModelAdmin): return config_value + def get_changelist_form(self, request): + """ + Returns a Form class for use in the changelist_view. + """ + # Defaults to self.change_list_form in order to preserve backward + # compatibility + return self.change_list_form + @csrf_protect_m def changelist_view(self, request, extra_context=None): if not self.has_change_permission(request, None): raise PermissionDenied initial = get_values() - form = self.change_list_form(initial=initial) + form_cls = self.get_changelist_form(request) + form = form_cls(initial=initial) if request.method == 'POST': - form = self.change_list_form(data=request.POST, initial=initial) + form = form_cls(data=request.POST, initial=initial) if form.is_valid(): form.save() messages.add_message(