diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py index ff281b032a..b0b449c76d 100644 --- a/django/utils/datastructures.py +++ b/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_): diff --git a/docs/ref/request-response.txt b/docs/ref/request-response.txt index d4ff40a746..72872d5b40 100644 --- a/docs/ref/request-response.txt +++ b/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_) diff --git a/tests/regressiontests/utils/datastructures.py b/tests/regressiontests/utils/datastructures.py index 3ef1342325..2f1a47a656 100644 --- a/tests/regressiontests/utils/datastructures.py +++ b/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'])