Browse Source

Fixed #6580 -- Added `default` parameter to `MultiValueDict.getlist` method (the base class for `QueryDict`). Many thanks to mk and andrewebdev.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16260 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Jannis Leidel 14 years ago
parent
commit
fc8116cc4f

+ 8 - 2
django/utils/datastructures.py

@@ -228,6 +228,10 @@ class MultiValueDict(dict):
     'Simon'
     >>> d.getlist('name')
     ['Adrian', 'Simon']
+    >>> d.getlist('doesnotexist')
+    []
+    >>> d.getlist('doesnotexist', ['Adrian', 'Simon'])
+    ['Adrian', 'Simon']
     >>> d.get('lastname', 'nonexistent')
     'nonexistent'
     >>> d.setlist('lastname', ['Holovaty', 'Willison'])
@@ -300,14 +304,16 @@ class MultiValueDict(dict):
             return default
         return val
 
-    def getlist(self, key):
+    def getlist(self, key, default=None):
         """
         Returns the list of values for the passed key. If key doesn't exist,
-        then an empty list is returned.
+        then a default value is returned.
         """
         try:
             return super(MultiValueDict, self).__getitem__(key)
         except KeyError:
+            if default is not None:
+                return default
             return []
 
     def setlist(self, key, list_):

+ 7 - 3
docs/ref/request-response.txt

@@ -448,11 +448,15 @@ In addition, ``QueryDict`` has the following methods:
     standard library. The copy will be mutable -- that is, you can change its
     values.
 
-.. method:: QueryDict.getlist(key)
+.. method:: QueryDict.getlist(key, default)
 
     Returns the data with the requested key, as a Python list. Returns an
-    empty list if the key doesn't exist. It's guaranteed to return a list of
-    some sort.
+    empty list if the key doesn't exist and no default value was provided.
+    It's guaranteed to return a list of some sort unless the default value
+    was no list.
+
+    .. versionchanged:: 1.4
+        The ``default`` parameter was added.
 
 .. method:: QueryDict.setlist(key, list_)
 

+ 2 - 0
tests/regressiontests/utils/datastructures.py

@@ -206,6 +206,8 @@ class MultiValueDictTests(DatastructuresTestCase):
         self.assertEqual(d.get('lastname'), None)
         self.assertEqual(d.get('lastname', 'nonexistent'), 'nonexistent')
         self.assertEqual(d.getlist('lastname'), [])
+        self.assertEqual(d.getlist('doesnotexist', ['Adrian', 'Simon']),
+                         ['Adrian', 'Simon'])
 
         d.setlist('lastname', ['Holovaty', 'Willison'])
         self.assertEqual(d.getlist('lastname'), ['Holovaty', 'Willison'])