[PATCH 16/19] REST: Allow for mutability of request.POST
Stephen Finucane
stephen at that.guru
Thu May 11 05:45:25 AEST 2017
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 <stephen at that.guru>
---
patchwork/api/check.py | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/patchwork/api/check.py b/patchwork/api/check.py
index d4aa223..636ee1d 100644
--- a/patchwork/api/check.py
+++ b/patchwork/api/check.py
@@ -67,7 +67,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.9.3
More information about the Patchwork
mailing list