summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/utils/datastructures.py6
-rw-r--r--docs/ref/request-response.txt12
-rw-r--r--tests/regressiontests/utils/datastructures.py12
3 files changed, 30 insertions, 0 deletions
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py
index b0b449c76d..46f705f747 100644
--- a/django/utils/datastructures.py
+++ b/django/utils/datastructures.py
@@ -391,6 +391,12 @@ class MultiValueDict(dict):
for key, value in kwargs.iteritems():
self.setlistdefault(key, []).append(value)
+ def dict(self):
+ """
+ Returns current object as a dict with singular values.
+ """
+ return dict((key, self[key]) for key in self)
+
class DotExpandedDict(dict):
"""
A special dictionary constructor that takes a dictionary in which the keys
diff --git a/docs/ref/request-response.txt b/docs/ref/request-response.txt
index ff04e25b1d..295fba176f 100644
--- a/docs/ref/request-response.txt
+++ b/docs/ref/request-response.txt
@@ -482,6 +482,18 @@ In addition, ``QueryDict`` has the following methods:
>>> q.lists()
[(u'a', [u'1', u'2', u'3'])]
+.. method:: QueryDict.dict()
+
+ .. versionadded:: 1.4
+
+ Returns ``dict`` representation of ``QueryDict``. For every (key, list)
+ pair in ``QueryDict``, ``dict`` will have (key, item), where item is one
+ element of the list, using same logic as :meth:`QueryDict.__getitem__()`::
+
+ >>> q = QueryDict('a=1&a=3&a=5')
+ >>> q.dict()
+ {u'a': u'5'}
+
.. method:: QueryDict.urlencode([safe])
Returns a string of the data in query-string format. Example::
diff --git a/tests/regressiontests/utils/datastructures.py b/tests/regressiontests/utils/datastructures.py
index 2f1a47a656..88b83f75bd 100644
--- a/tests/regressiontests/utils/datastructures.py
+++ b/tests/regressiontests/utils/datastructures.py
@@ -235,6 +235,18 @@ class MultiValueDictTests(DatastructuresTestCase):
self.assertEqual(d1["key"], ["Penguin"])
self.assertEqual(d2["key"], ["Penguin"])
+ def test_dict_translation(self):
+ mvd = MultiValueDict({
+ 'devs': ['Bob', 'Joe'],
+ 'pm': ['Rory'],
+ })
+ d = mvd.dict()
+ self.assertEqual(d.keys(), mvd.keys())
+ for key in mvd.keys():
+ self.assertEqual(d[key], mvd[key])
+
+ self.assertEqual({}, MultiValueDict().dict())
+
class DotExpandedDictTests(DatastructuresTestCase):