Dear all.

I would just say that implementation of SelectMultiple.value_from_datadict 
is not based on duck typing, and has some disadvantages.
Source: 
https://github.com/django/django/blob/master/django/forms/widgets.py#L606

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

First, always checking the instance type has worse efficiency than 
try-except block, because most hits may be returned without any additional 
checking.
Second, as an author of library which also works with Django, I'm providing 
multivalue-like dict, but own implemented - it is not an instance of 
MultiValueDict and never be, but it has similar interface (i.e. `get()` and 
`getlist()` methods) 

Duck typing will work for both cases. The implementation might look like:

    def value_from_datadict(self, data, files, name):
        try:        
            return data.getlist(name)
        except AttributeError:        
            return data.get(name)

For most cases a MultiValueDict / QueryDict are passed to forms, so the 
function will immediately return a proper value, and will also work for 
objects that "looks like MultiValueDict". On other cases it assumes that 
the `data` object is dict-like.

What do you think?

Kind Regards,
Marcin

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers  (Contributions to Django itself)" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/b5fe2add-05d7-4def-9863-ceecf4d0ecdc%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to