#27578: ModelChoiceField.to_python() somehow receives value as type 'list'
--------------------------------------------+------------------------
               Reporter:  Julian Schneider  |          Owner:  nobody
                   Type:  Bug               |         Status:  new
              Component:  Forms             |        Version:  1.9
               Severity:  Normal            |       Keywords:
           Triage Stage:  Unreviewed        |      Has patch:  0
    Needs documentation:  0                 |    Needs tests:  0
Patch needs improvement:  0                 |  Easy pickings:  0
                  UI/UX:  0                 |
--------------------------------------------+------------------------
 Whenever im running form.is_valid() i get the error:

 > Select a valid choice. That choice is not one of the available
 > choices.

 Here is what I do in my view:

 {{{

     timeframes = HostTimeFrame.objects.all()
     if request.method == 'POST':
         form = SelectDatesForm(request.POST, timeframes=timeframes)
         if form.is_valid():
             pass
     else:
         form = SelectDatesForm(timeframes=timeframes)

 }}}

 My form does this:


 {{{
   class SelectDatesForm(forms.Form):
         timeframes =
 forms.ModelChoiceField(queryset=HostTimeFrame.objects.none(),
 widget=forms.CheckboxSelectMultiple,
                                             empty_label=None)
         def __init__(self, *args, **kwargs):
             qs = kwargs.pop('timeframes')
             super(SelectDatesForm, self).__init__(*args, **kwargs)
             self.fields['timeframes'].queryset = qs.order_by('start')
 }}}


 Ive been trying for hours to find where this actual validation is done,
 and realized the exception is raised in ModelChoiceField.to_python()


 {{{
         try:
             key = self.to_field_name or 'pk'
             value = self.queryset.get(**{key: value})
         except (ValueError, TypeError, self.queryset.model.DoesNotExist):
             raise ValidationError(self.error_messages['invalid_choice'],
 code='invalid_choice')
 }}}

 Where value is the primary key, ** but in List format**, this raises and
 exception.

--
Ticket URL: <https://code.djangoproject.com/ticket/27578>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/058.21bf9731b721b7b5eaad0eb5f501e839%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to