From da72db5d8a3d27092567a19219bd48c33ab8dbc4 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Fri, 19 May 2017 15:53:22 +0100 Subject: [PATCH] REST: Allow for mutability of request.POST Using Django 1.11 yields the following error for the 'patchwork.tests .test_rest_api.TestCheckAPI.test_create' test: AttributeError: This QueryDict instance is immutable This occurs due to our modification of data to allow users to create instances using a slugified state instead of the underlying integer value, e.g. 'success' instead of 1. Resolve this by unsetting the immutability of that queryset. As suggested in the linked SO answer, there is limited side effects to doing this. Signed-off-by: Stephen Finucane Tested-by: Daniel Axtens --- patchwork/api/check.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/patchwork/api/check.py b/patchwork/api/check.py index 5b381505..b37d6e01 100644 --- a/patchwork/api/check.py +++ b/patchwork/api/check.py @@ -49,7 +49,16 @@ class CheckSerializer(HyperlinkedModelSerializer): def run_validation(self, data): for val, label in Check.STATE_CHOICES: if label == data['state']: + # NOTE(stephenfin): 'data' is essentially 'request.POST', which + # is immutable by default. However, there's no good reason for + # this to be this way [1], so temporarily unset that mutability + # to fix what we need to here. + # + # [1] http://stackoverflow.com/a/12619745/613428 + mutable = data._mutable # noqa + data._mutable = True # noqa data['state'] = val + data._mutable = mutable # noqa break return super(CheckSerializer, self).run_validation(data) -- 2.47.3