Commit 6d6fb392 authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

Fixed #7195 -- Fixed the validation of MultipleChoice fields so that they can

be populated from request.REQUEST. Based on a patch from Daniel Roseman.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@8525 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent d6e56329
Loading
Loading
Loading
Loading
+24 −24
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ except NameError:
import copy
from itertools import chain
from django.conf import settings
from django.utils.datastructures import MultiValueDict
from django.utils.datastructures import MultiValueDict, MergeDict
from django.utils.html import escape, conditional_escape
from django.utils.translation import ugettext
from django.utils.encoding import StrAndUnicode, force_unicode
@@ -250,7 +250,7 @@ class MultipleHiddenInput(HiddenInput):
            for v in value]))

    def value_from_datadict(self, data, files, name):
        if isinstance(data, MultiValueDict):
        if isinstance(data, (MultiValueDict, MergeDict)):
            return data.getlist(name)
        return data.get(name, None)

@@ -417,7 +417,7 @@ class SelectMultiple(Select):
        return mark_safe(u'\n'.join(output))

    def value_from_datadict(self, data, files, name):
        if isinstance(data, MultiValueDict):
        if isinstance(data, (MultiValueDict, MergeDict)):
            return data.getlist(name)
        return data.get(name, None)

+8 −2
Original line number Diff line number Diff line
@@ -540,8 +540,9 @@ zero-based index.
<li><label for="composers_id_1"><input type="checkbox" name="composers" value="P" id="composers_id_1" /> Paul McCartney</label></li>
</ul>

Data for a MultipleChoiceField should be a list. QueryDict and MultiValueDict
conveniently work with this.
Data for a MultipleChoiceField should be a list. QueryDict, MultiValueDict and
MergeDict (when created as a merge of MultiValueDicts) conveniently work with
this.
>>> data = {'name': 'Yesterday', 'composers': ['J', 'P']}
>>> f = SongForm(data)
>>> f.errors
@@ -556,6 +557,11 @@ conveniently work with this.
>>> f = SongForm(data)
>>> f.errors
{}
>>> from django.utils.datastructures import MergeDict
>>> data = MergeDict(MultiValueDict(dict(name=['Yesterday'], composers=['J', 'P'])))
>>> f = SongForm(data)
>>> f.errors
{}

The MultipleHiddenInput widget renders multiple values as hidden fields.
>>> class SongFormHidden(Form):