From 64ff8c5b0b3482a42aaf16236b86e3d2cff86579 Mon Sep 17 00:00:00 2001 From: orf Date: Mon, 24 Apr 2017 20:55:16 +0100 Subject: [PATCH] #4917 - Remove O(n) queries in m2m updates --- rest_framework/relations.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/rest_framework/relations.py b/rest_framework/relations.py index eac9647b0..f5d83c68b 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -491,11 +491,14 @@ class ManyRelatedField(Field): self.fail('not_a_list', input_type=type(data).__name__) if not self.allow_empty and len(data) == 0: self.fail('empty') + + values = list(self.child_relation.get_queryset.filter(pk__in=data)) + missing_primary_keys = set(v.pk for v in values) - set(data) + + if missing_primary_keys: + self.fail('missing_ids', ids_not_found=list(missing_primary_keys)) - return [ - self.child_relation.to_internal_value(item) - for item in data - ] + return values def get_attribute(self, instance): # Can't have any relationships if not created