Code

Ticket #8278: 8278.querydict.diff

File 8278.querydict.diff, 2.3 KB (added by julien, 6 years ago)

Patch and regression tests

Line 
1Index: django/django/http/__init__.py
2===================================================================
3--- django/django/http/__init__.py      (revision 8335)
4+++ django/django/http/__init__.py      (working copy)
5@@ -191,7 +191,7 @@
6     def update(self, other_dict):
7         self._assert_mutable()
8         f = lambda s: str_to_unicode(s, self.encoding)
9-        d = dict([(f(k), f(v)) for k, v in other_dict.items()])
10+        d = dict([(f(k), [f(v) for v in values]) for k, values in other_dict.lists()])
11         MultiValueDict.update(self, d)
12 
13     def pop(self, key, *args):
14Index: django/django/utils/datastructures.py
15===================================================================
16--- django/django/utils/datastructures.py       (revision 8335)
17+++ django/django/utils/datastructures.py       (working copy)
18@@ -293,7 +293,10 @@
19             else:
20                 try:
21                     for key, value in other_dict.items():
22-                        self.setlistdefault(key, []).append(value)
23+                        if isinstance(value, list):
24+                            self.setlistdefault(key, []).extend(value)
25+                        else:
26+                            self.setlistdefault(key, []).append(value)
27                 except TypeError:
28                     raise ValueError, "MultiValueDict.update() takes either a MultiValueDict or dictionary"
29         for key, value in kwargs.iteritems():
30Index: django/tests/regressiontests/httpwrappers/tests.py
31===================================================================
32--- django/tests/regressiontests/httpwrappers/tests.py  (revision 8335)
33+++ django/tests/regressiontests/httpwrappers/tests.py  (working copy)
34@@ -426,7 +426,20 @@
35 Traceback (most recent call last):
36 ...
37 UnicodeEncodeError: ..., HTTP response headers must be in US-ASCII format
38-
39+
40+
41+#############################################################
42+# Merging 2 QueryDict's with same keys and multiple values  #
43+#############################################################
44+
45+>>> x = QueryDict('a=1&a=2')
46+>>> y = QueryDict('a=3&a=4')
47+>>> x._mutable = True
48+>>> x.update(y)
49+>>> x._mutable=False
50+>>> x
51+<QueryDict: {u'a': [u'1', u'2', u'3', u'4']}>
52+
53 """
54 
55 from django.http import QueryDict, HttpResponse