JSONField not rendered properly in DRF browsable API HTML form · Issue #4999 · encode/django-rest-framework (original) (raw)

Checklist

Expected behavior

Assuming:

then that data should render as a JSON object in DRF browsable API (particularly because the serializer requires input to be valid JSON for POST/PUT/PATCH methods)

Actual behavior

Data renders as native python in DRF browsable API form field (e.g. single quotes, uppercase booleans)

instance_view_html

Note that the "Raw data" view of the input section renders the data correctly as JSON.

instance_view_raw

Steps to reproduce

(venv)vagrant@vm:/vagrant/src/app$ python -V Python 3.4.3 (venv)vagrant@vm:/vagrant/src/app$ psql -V psql (PostgreSQL) 9.6.2

# requirements.txt
Django==1.10.6
psycopg2==2.7.1
-e git+git@github.com:tomchristie/django-rest-framework.git@73ad88eaae2f49bfd09508f2dcd6446677800a26#egg=djangorestframework-origin/HEAD

models.py

from django.db import models from django.contrib.postgres.fields import JSONField

class Foo(models.Model):

name = models.CharField(max_length=24)
data = JSONField()

serializers.py

from rest_framework import serializers

from jsontest import models

class FooSerializer(serializers.HyperlinkedModelSerializer):

name = serializers.CharField(max_length=24)
data = serializers.JSONField()

class Meta:
    model = models.Foo
    fields = ('url', 'name', 'data')
>>> from jsontest.models import *
>>> f = Foo()
>>> f.name = 'created via shell'
>>> f.data = {'input': 'native dict', 'bar': True}
>>> f.save()
>>> f.id
1