summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/models.py18
1 files changed, 9 insertions, 9 deletions
diff --git a/django/forms/models.py b/django/forms/models.py
index 871c58430c..02324aade4 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -757,14 +757,14 @@ class ModelMultipleChoiceField(ModelChoiceField):
return []
if not isinstance(value, (list, tuple)):
raise ValidationError(self.error_messages['list'])
- final_values = []
- for val in value:
+ for pk in value:
try:
- obj = self.queryset.get(pk=val)
- except self.queryset.model.DoesNotExist:
- raise ValidationError(self.error_messages['invalid_choice'] % val)
+ self.queryset.filter(pk=pk)
except ValueError:
- raise ValidationError(self.error_messages['invalid_pk_value'] % val)
- else:
- final_values.append(obj)
- return final_values
+ raise ValidationError(self.error_messages['invalid_pk_value'] % pk)
+ qs = self.queryset.filter(pk__in=value)
+ pks = set([force_unicode(o.pk) for o in qs])
+ for val in value:
+ if force_unicode(val) not in pks:
+ raise ValidationError(self.error_messages['invalid_choice'] % val)
+ return qs