Admin actions loose get-parameters in changelist view
|Reported by:||Johannes Bornhold||Owned by:||Chris Beaven|
|Cc:||Triage Stage:||Ready for checkin|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
If the actions from the admin changelist view are used, the user will be redirected to the changeliste view, but if a filter or search was active, this information will be lost after redirection.
We discovert this behaviour as problematic in different satchmo/django-based shops we are hosting. If our users filter products for a specific category and use an action to mark some of them as featured products, they will end up in the changelist view, but see all products again. This also affects pagination in changelist views, because this information is also lost after redirection. Most of our users expected these filters to be remembered after action usage.
I stripped down the reason to the package
django.contrib.admin.options in the class
ModelAdmin. The method
response_action will return a
HttpResponseRedirect('.') when the action itself does not return a response. The Location-header will then be "fixed" in
django.http.utils in the function
fix_location_header. This function seems to enable some kind of "relative redirection feeling" in django. It uses
A simple fix / enhancement would be to change
ModelAdmin.response_action to return
HttpReponseRedirect(request.build_absolute_uri()) if the action itself does not return a response. Alternative would be to use
HttpReponseRedirect(''), but I am not sure if this is a "clean" way.
I will attach patches for both variants shortly.
Change History (10)
comment:1 Changed 7 years ago by
|Patch needs improvement:||unset|
comment:5 Changed 6 years ago by
|Owner:||changed from nobody to Chris Beaven|
|Status:||reopened → new|
|Triage Stage:||Accepted → Ready for checkin|