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)
This commit is contained in:
Martin Pépin 2017-02-14 01:21:51 +01:00
parent baab89f4ac
commit be65f6536a

View file

@ -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(