33import json
44import re
55from functools import partial , update_wrapper
6+ from urllib .parse import parse_qsl
67from urllib .parse import quote as urlquote
8+ from urllib .parse import urlparse
79
810from django import forms
911from django .conf import settings
@@ -1346,12 +1348,17 @@ def render_change_form(
13461348 context ,
13471349 )
13481350
1351+ def _get_preserved_qsl (self , request , preserved_filters ):
1352+ query_string = urlparse (request .build_absolute_uri ()).query
1353+ return parse_qsl (query_string .replace (preserved_filters , "" ))
1354+
13491355 def response_add (self , request , obj , post_url_continue = None ):
13501356 """
13511357 Determine the HttpResponse for the add_view stage.
13521358 """
13531359 opts = obj ._meta
13541360 preserved_filters = self .get_preserved_filters (request )
1361+ preserved_qsl = self ._get_preserved_qsl (request , preserved_filters )
13551362 obj_url = reverse (
13561363 "admin:%s_%s_change" % (opts .app_label , opts .model_name ),
13571364 args = (quote (obj .pk ),),
@@ -1409,7 +1416,11 @@ def response_add(self, request, obj, post_url_continue=None):
14091416 if post_url_continue is None :
14101417 post_url_continue = obj_url
14111418 post_url_continue = add_preserved_filters (
1412- {"preserved_filters" : preserved_filters , "opts" : opts },
1419+ {
1420+ "preserved_filters" : preserved_filters ,
1421+ "preserved_qsl" : preserved_qsl ,
1422+ "opts" : opts ,
1423+ },
14131424 post_url_continue ,
14141425 )
14151426 return HttpResponseRedirect (post_url_continue )
@@ -1425,7 +1436,12 @@ def response_add(self, request, obj, post_url_continue=None):
14251436 self .message_user (request , msg , messages .SUCCESS )
14261437 redirect_url = request .path
14271438 redirect_url = add_preserved_filters (
1428- {"preserved_filters" : preserved_filters , "opts" : opts }, redirect_url
1439+ {
1440+ "preserved_filters" : preserved_filters ,
1441+ "preserved_qsl" : preserved_qsl ,
1442+ "opts" : opts ,
1443+ },
1444+ redirect_url ,
14291445 )
14301446 return HttpResponseRedirect (redirect_url )
14311447
@@ -1471,6 +1487,7 @@ def response_change(self, request, obj):
14711487
14721488 opts = self .opts
14731489 preserved_filters = self .get_preserved_filters (request )
1490+ preserved_qsl = self ._get_preserved_qsl (request , preserved_filters )
14741491
14751492 msg_dict = {
14761493 "name" : opts .verbose_name ,
@@ -1487,7 +1504,12 @@ def response_change(self, request, obj):
14871504 self .message_user (request , msg , messages .SUCCESS )
14881505 redirect_url = request .path
14891506 redirect_url = add_preserved_filters (
1490- {"preserved_filters" : preserved_filters , "opts" : opts }, redirect_url
1507+ {
1508+ "preserved_filters" : preserved_filters ,
1509+ "preserved_qsl" : preserved_qsl ,
1510+ "opts" : opts ,
1511+ },
1512+ redirect_url ,
14911513 )
14921514 return HttpResponseRedirect (redirect_url )
14931515
@@ -1524,7 +1546,12 @@ def response_change(self, request, obj):
15241546 current_app = self .admin_site .name ,
15251547 )
15261548 redirect_url = add_preserved_filters (
1527- {"preserved_filters" : preserved_filters , "opts" : opts }, redirect_url
1549+ {
1550+ "preserved_filters" : preserved_filters ,
1551+ "preserved_qsl" : preserved_qsl ,
1552+ "opts" : opts ,
1553+ },
1554+ redirect_url ,
15281555 )
15291556 return HttpResponseRedirect (redirect_url )
15301557
0 commit comments