aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/renderers.py
diff options
context:
space:
mode:
authorTom Christie2013-10-02 16:13:34 +0100
committerTom Christie2013-10-02 16:13:34 +0100
commit8d4ba478cc5725b4de6ab86b4825b1ea94cb4c7b (patch)
tree75187b1e1d5bd77dd4f137b467da5ce7a5b09603 /rest_framework/renderers.py
parenta14f1e886402b8d0f742fdbb912b03a4004e1735 (diff)
downloaddjango-rest-framework-8d4ba478cc5725b4de6ab86b4825b1ea94cb4c7b.tar.bz2
Fix rendering of forms and add error rendering on HTML form
Diffstat (limited to 'rest_framework/renderers.py')
-rw-r--r--rest_framework/renderers.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py
index 0e17edaf..fe4f43d4 100644
--- a/rest_framework/renderers.py
+++ b/rest_framework/renderers.py
@@ -419,6 +419,13 @@ class BrowsableAPIRenderer(BaseRenderer):
In the absence of the View having an associated form then return None.
"""
+ if request.method == method:
+ data = request.DATA
+ files = request.FILES
+ else:
+ data = None
+ files = None
+
with override_method(view, request, method) as request:
obj = getattr(view, 'object', None)
if not self.show_form_for_method(view, method, request, obj):
@@ -431,9 +438,10 @@ class BrowsableAPIRenderer(BaseRenderer):
or not any(is_form_media_type(parser.media_type) for parser in view.parser_classes)):
return
- serializer = view.get_serializer(instance=obj)
-
+ serializer = view.get_serializer(instance=obj, data=data, files=files)
+ serializer.is_valid()
data = serializer.data
+
form_renderer = self.form_renderer_class()
return form_renderer.render(data, self.accepted_media_type, self.renderer_context)
@@ -525,6 +533,7 @@ class BrowsableAPIRenderer(BaseRenderer):
renderer = self.get_default_renderer(view)
+ raw_data_post_form = self.get_raw_data_form(view, 'POST', request)
raw_data_put_form = self.get_raw_data_form(view, 'PUT', request)
raw_data_patch_form = self.get_raw_data_form(view, 'PATCH', request)
raw_data_put_or_patch_form = raw_data_put_form or raw_data_patch_form
@@ -543,12 +552,11 @@ class BrowsableAPIRenderer(BaseRenderer):
'put_form': self.get_rendered_html_form(view, 'PUT', request),
'post_form': self.get_rendered_html_form(view, 'POST', request),
- 'patch_form': self.get_rendered_html_form(view, 'PATCH', request),
'delete_form': self.get_rendered_html_form(view, 'DELETE', request),
'options_form': self.get_rendered_html_form(view, 'OPTIONS', request),
'raw_data_put_form': raw_data_put_form,
- 'raw_data_post_form': self.get_raw_data_form(view, 'POST', request),
+ 'raw_data_post_form': raw_data_post_form,
'raw_data_patch_form': raw_data_patch_form,
'raw_data_put_or_patch_form': raw_data_put_or_patch_form,