mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-28 00:49:49 +03:00
Pass serializer to HTMLFormRenderer and BrowsableAPIRenderer through renderer_context rather than .data
This commit is contained in:
parent
8cba4f87ca
commit
3ad465d92b
|
@ -355,7 +355,7 @@ class HTMLFormRenderer(BaseRenderer):
|
||||||
Render serializer data and return an HTML form, as a string.
|
Render serializer data and return an HTML form, as a string.
|
||||||
"""
|
"""
|
||||||
renderer_context = renderer_context or {}
|
renderer_context = renderer_context or {}
|
||||||
form = data.serializer
|
form = renderer_context.get('serializer')
|
||||||
|
|
||||||
style = renderer_context.get('style', {})
|
style = renderer_context.get('style', {})
|
||||||
if 'template_pack' not in style:
|
if 'template_pack' not in style:
|
||||||
|
@ -518,7 +518,10 @@ class BrowsableAPIRenderer(BaseRenderer):
|
||||||
return form_renderer.render(
|
return form_renderer.render(
|
||||||
serializer.data,
|
serializer.data,
|
||||||
self.accepted_media_type,
|
self.accepted_media_type,
|
||||||
{'style': {'template_pack': 'rest_framework/horizontal'}}
|
{
|
||||||
|
'style': {'template_pack': 'rest_framework/horizontal'},
|
||||||
|
'serializer': serializer
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_raw_data_form(self, data, view, method, request):
|
def get_raw_data_form(self, data, view, method, request):
|
||||||
|
|
|
@ -539,14 +539,6 @@ class Serializer(BaseSerializer, metaclass=SerializerMetaclass):
|
||||||
return JSONBoundField(field, value, error)
|
return JSONBoundField(field, value, error)
|
||||||
return BoundField(field, value, error)
|
return BoundField(field, value, error)
|
||||||
|
|
||||||
# Include a backlink to the serializer class on return objects.
|
|
||||||
# Allows renderers such as HTMLFormRenderer to get the full field info.
|
|
||||||
|
|
||||||
@property
|
|
||||||
def data(self):
|
|
||||||
ret = super().data
|
|
||||||
return ReturnDict(ret, serializer=self)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def errors(self):
|
def errors(self):
|
||||||
ret = super().errors
|
ret = super().errors
|
||||||
|
@ -737,14 +729,6 @@ class ListSerializer(BaseSerializer):
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return representation.list_repr(self, indent=1)
|
return representation.list_repr(self, indent=1)
|
||||||
|
|
||||||
# Include a backlink to the serializer class on return objects.
|
|
||||||
# Allows renderers such as HTMLFormRenderer to get the full field info.
|
|
||||||
|
|
||||||
@property
|
|
||||||
def data(self):
|
|
||||||
ret = super().data
|
|
||||||
return ReturnList(ret, serializer=self)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def errors(self):
|
def errors(self):
|
||||||
ret = super().errors
|
ret = super().errors
|
||||||
|
|
|
@ -78,7 +78,7 @@ def get_pagination_html(pager):
|
||||||
def render_form(serializer, template_pack=None):
|
def render_form(serializer, template_pack=None):
|
||||||
style = {'template_pack': template_pack} if template_pack else {}
|
style = {'template_pack': template_pack} if template_pack else {}
|
||||||
renderer = HTMLFormRenderer()
|
renderer = HTMLFormRenderer()
|
||||||
return renderer.render(serializer.data, None, {'style': style})
|
return renderer.render(serializer.data, None, {'style': style, 'serializer': serializer})
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag
|
@register.simple_tag
|
||||||
|
|
|
@ -499,17 +499,15 @@ class TestHTMLFormRenderer(TestCase):
|
||||||
|
|
||||||
def test_render_with_default_args(self):
|
def test_render_with_default_args(self):
|
||||||
self.serializer.is_valid()
|
self.serializer.is_valid()
|
||||||
renderer = HTMLFormRenderer()
|
|
||||||
|
|
||||||
result = renderer.render(self.serializer.data)
|
result = self.renderer.render(self.serializer.data, renderer_context={'serializer': self.serializer})
|
||||||
|
|
||||||
self.assertIsInstance(result, SafeText)
|
self.assertIsInstance(result, SafeText)
|
||||||
|
|
||||||
def test_render_with_provided_args(self):
|
def test_render_with_provided_args(self):
|
||||||
self.serializer.is_valid()
|
self.serializer.is_valid()
|
||||||
renderer = HTMLFormRenderer()
|
|
||||||
|
|
||||||
result = renderer.render(self.serializer.data, None, {})
|
result = self.renderer.render(self.serializer.data, None, {'serializer': self.serializer})
|
||||||
|
|
||||||
self.assertIsInstance(result, SafeText)
|
self.assertIsInstance(result, SafeText)
|
||||||
|
|
||||||
|
@ -531,7 +529,7 @@ class TestChoiceFieldHTMLFormRenderer(TestCase):
|
||||||
|
|
||||||
def test_render_initial_option(self):
|
def test_render_initial_option(self):
|
||||||
serializer = self.TestSerializer()
|
serializer = self.TestSerializer()
|
||||||
result = self.renderer.render(serializer.data)
|
result = self.renderer.render(serializer.data, renderer_context={'serializer': serializer})
|
||||||
|
|
||||||
self.assertIsInstance(result, SafeText)
|
self.assertIsInstance(result, SafeText)
|
||||||
|
|
||||||
|
@ -544,7 +542,7 @@ class TestChoiceFieldHTMLFormRenderer(TestCase):
|
||||||
serializer = self.TestSerializer(data={'test_field': '12'})
|
serializer = self.TestSerializer(data={'test_field': '12'})
|
||||||
|
|
||||||
serializer.is_valid()
|
serializer.is_valid()
|
||||||
result = self.renderer.render(serializer.data)
|
result = self.renderer.render(serializer.data, renderer_context={'serializer': serializer})
|
||||||
|
|
||||||
self.assertIsInstance(result, SafeText)
|
self.assertIsInstance(result, SafeText)
|
||||||
|
|
||||||
|
@ -572,7 +570,7 @@ class TestMultipleChoiceFieldHTMLFormRenderer(TestCase):
|
||||||
serializer = TestSerializer(data={'test_field': ['12']})
|
serializer = TestSerializer(data={'test_field': ['12']})
|
||||||
serializer.is_valid()
|
serializer.is_valid()
|
||||||
|
|
||||||
result = self.renderer.render(serializer.data)
|
result = self.renderer.render(serializer.data, renderer_context={'serializer': serializer})
|
||||||
|
|
||||||
self.assertIsInstance(result, SafeText)
|
self.assertIsInstance(result, SafeText)
|
||||||
|
|
||||||
|
@ -591,7 +589,7 @@ class TestMultipleChoiceFieldHTMLFormRenderer(TestCase):
|
||||||
serializer = TestSerializer(data={'test_field': ['12']})
|
serializer = TestSerializer(data={'test_field': ['12']})
|
||||||
serializer.is_valid()
|
serializer.is_valid()
|
||||||
|
|
||||||
result = self.renderer.render(serializer.data)
|
result = self.renderer.render(serializer.data, renderer_context={'serializer': serializer})
|
||||||
|
|
||||||
self.assertIsInstance(result, SafeText)
|
self.assertIsInstance(result, SafeText)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user