mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-07 22:04:48 +03:00
Allow JSONField webform-input to support JSON Objects
This commit is contained in:
parent
e35f0fd3c6
commit
75bb9c5b39
|
@ -1541,6 +1541,16 @@ class JSONField(Field):
|
|||
self.binary = kwargs.pop('binary', False)
|
||||
super(JSONField, self).__init__(*args, **kwargs)
|
||||
|
||||
def get_value(self, dictionary):
|
||||
"""
|
||||
If the incoming data is an html-input then it always comes in stringified via. the
|
||||
multipart/form-input so we should call json.loads on it.
|
||||
"""
|
||||
ret = super(JSONField, self).get_value(dictionary)
|
||||
if html.is_html_input(dictionary):
|
||||
return json.loads(ret)
|
||||
return ret
|
||||
|
||||
def to_internal_value(self, data):
|
||||
try:
|
||||
if self.binary:
|
||||
|
|
|
@ -30,6 +30,7 @@ from rest_framework.settings import api_settings
|
|||
from rest_framework.utils import encoders
|
||||
from rest_framework.utils.breadcrumbs import get_breadcrumbs
|
||||
from rest_framework.utils.field_mapping import ClassLookupDict
|
||||
from rest_framework.fields import JSONField
|
||||
|
||||
|
||||
def zero_as_none(value):
|
||||
|
@ -319,9 +320,14 @@ class HTMLFormRenderer(BaseRenderer):
|
|||
style['template_pack'] = parent_style.get('template_pack', self.template_pack)
|
||||
style['renderer'] = self
|
||||
|
||||
# If we are rendering a JSON Field we want to convert Python literals to Javascript literals
|
||||
if issubclass(field._proxy_class, JSONField):
|
||||
field.value = json.dumps(field.value)
|
||||
|
||||
# Get a clone of the field with text-only value representation.
|
||||
field = field.as_form_field()
|
||||
|
||||
|
||||
if style.get('input_type') == 'datetime-local' and isinstance(field.value, six.text_type):
|
||||
field.value = field.value.rstrip('Z')
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user