From 9ccfc940775787638848304021744797d837b87a Mon Sep 17 00:00:00 2001 From: Christopher Adams Date: Sun, 13 Sep 2015 01:09:56 -0400 Subject: [PATCH] Fixed #2761 - ListField truncation on HTTP PATCH - Checked ``partial`` state when getting value in appropriate field classes; return ``empty`` immediately if key not submitted. --- rest_framework/fields.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 159784ea3..967e461fe 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1262,14 +1262,13 @@ class MultipleChoiceField(ChoiceField): super(MultipleChoiceField, self).__init__(*args, **kwargs) def get_value(self, dictionary): + if self.field_name not in dictionary: + if getattr(self.root, 'partial', False): + return empty # We override the default field access in order to support # lists in HTML forms. if html.is_html_input(dictionary): - ret = dictionary.getlist(self.field_name) - if getattr(self.root, 'partial', False) and not ret: - ret = empty - return ret - + return dictionary.getlist(self.field_name) return dictionary.get(self.field_name, empty) def to_internal_value(self, data): @@ -1416,6 +1415,9 @@ class ListField(Field): self.child.bind(field_name='', parent=self) def get_value(self, dictionary): + if self.field_name not in dictionary: + if getattr(self.root, 'partial', False): + return empty # We override the default field access in order to support # lists in HTML forms. if html.is_html_input(dictionary):