I use djangorestframework==3.9.4, I can't realize why drf changes serialized data (add underlines to field names before numbers and uppercase)
# views.py:
class RetrieveUpdateJsonFields(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
viewsets.GenericViewSet):
queryset = JsonFieldObject.objects.all()
serializers = {
'default': JsonFieldRetriveSerializer,
'update': JsonFieldUpdateSerializer,
}
def get_serializer_class(self):
return self.serializers.get(self.action,
self.serializers['default'])
# serializers.py:
class JsonFieldUpdateSerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
context = serializers.JSONField()
class Meta:
model = JsonFieldObject
fields = ('id', 'context')
def validate(self, data):
""" for trace """
print(data["context"])
return data
I try send put request, that contains next data:
{
"id":1,
"context": {
"floor_field": 27,
"square2": 222,
"oneAs": "Hello"
}
}
in serializer I expected this:
{'id': 1, 'context': {'floor_field': 27, 'square2': 222, 'oneAs': 'Hello'}}
but got:
{'id': 1, 'context': {'floor_field': 27, 'square_2': 222, 'one_As': 'Hello'}}
how can I disable this behavior?
DRF does this jobs based on Python PEP8
style guide.
You can disable it with third-party tools. It seems you are expecting camelCase
. so to get camelCase response, use djangorestframework-camel-case
:
install it pip install djangorestframework-camel-case
Update your DRF setting like this:
REST_FRAMEWORK = {
# ...
'JSON_UNDERSCOREIZE': {
'no_underscore_before_number': True,
},
# ...
}
If you want more advance configuration, you can follow this: # ... REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'djangorestframework_camel_case.render.CamelCaseJSONRenderer',
'djangorestframework_camel_case.render.CamelCaseBrowsableAPIRenderer',
# Any other renders
),
'DEFAULT_PARSER_CLASSES': (
# If you use MultiPartFormParser or FormParser, we also have a camel case version
'djangorestframework_camel_case.parser.CamelCaseFormParser',
'djangorestframework_camel_case.parser.CamelCaseMultiPartParser',
'djangorestframework_camel_case.parser.CamelCaseJSONParser',
# Any other parsers
),
}
# ...
More details can be found here: https://github.com/vbabiy/djangorestframework-camel-case