#25387: ModelAdmin actions don't get access to the ActionForm
-------------------------------+--------------------
     Reporter:  mbox           |      Owner:  nobody
         Type:  Bug            |     Status:  new
    Component:  contrib.admin  |    Version:  master
     Severity:  Normal         |   Keywords:
 Triage Stage:  Unreviewed     |  Has patch:  0
Easy pickings:  0              |      UI/UX:  0
-------------------------------+--------------------
 Setting an alternative ModelAdmin.action_form is supported, but
 ModelAdmin.actions don't get access to the form.

 The naive approach is to rebind the form in the action:

 {{{
 class ExampleAdmin(admin.ModelAdmin):
      action_form = ExampleForm
      actions = ['example_action']

      def example_action(self, request, queryset):
          form = ExampleForm(request.POST)
          if form.is_valid():
              # Process...
 }}}

 However, this doesn't work (`form.is_valid()` returns False) because
 there's special processing done on the `request.DATA` before the form is
 bound - see
 
https://github.com/django/django/blob/master/django/contrib/admin/options.py#L1205-L1220

 So either this code has to be duplicated in the action, or the
 `request.POST` data processed manually. Neither seem ideal.

 A proposed fix would be to make the action_form that's bound in options.py
 be available as `self.bound_action_form` so that actions could access it.
 This would be entirely backwards-compatible.

--
Ticket URL: <https://code.djangoproject.com/ticket/25387>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/047.1734401ff69f845d32f6ff621df482f0%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to