> 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.
Old description:
New description:
{{{
}}}
My form does this:
exception.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/27578#comment:1>
Comment (by Julian Schneider):
Replying to [comment:1 Julian Schneider]:
Created my own bugfixes in a custom field:
{{{
class CustomModelChoiceField(ModelChoiceField):
def to_python(self, value):
if value in self.empty_values:
return None
try:
key = self.to_field_name or 'pk'
if type(value) == list:
value = value[0]
value = self.queryset.get(**{key: value})
except (ValueError, TypeError, self.queryset.model.DoesNotExist):
raise ValidationError(self.error_messages['invalid_choice'],
code='invalid_choice')
return value
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/27578#comment:2>
* status: new => closed
* resolution: => invalid
Comment:
If you're using `widget=forms.CheckboxSelectMultiple` then you need to use
`ModelMultipleChoiceField` which accepts a list of values.
--
Ticket URL: <https://code.djangoproject.com/ticket/27578#comment:3>