为什么 drf 向序列化的 dictfield 添加下划线?

我用的是djangorestframework==3.9.4,我不明白为什么drf会改变序列化数据(在数字和大写前给字段名加下划线)

# 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

我尝试发送包含下一个数据的放置请求:

{
    "id":1,"context": {
        "floor_field": 27,"square2": 222,"oneAs": "Hello"
    }
}

在序列化程序中,我期望:

{'id': 1,'context': {'floor_field': 27,'square2': 222,'oneAs': 'Hello'}}

但得到:

{'id': 1,'square_2': 222,'one_As': 'Hello'}}

如何禁用此行为?

lixinnan11 回答:为什么 drf 向序列化的 dictfield 添加下划线?

DRF 根据 Python PEP8 风格指南完成这项工作。

您可以使用第三方工具禁用它。您似乎在期待 camelCase。所以要获得驼峰式响应,请使用 djangorestframework-camel-case:

安装它pip install djangorestframework-camel-case

像这样更新您的 DRF 设置:

REST_FRAMEWORK = {
    # ...
    'JSON_UNDERSCOREIZE': {
        'no_underscore_before_number': True,},# ...
}

如果你想要更高级的配置,你可以按照这个: # ... 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
    ),}
# ...

可以在此处找到更多详细信息:https://github.com/vbabiy/djangorestframework-camel-case

本文链接:https://www.f2er.com/33570.html

大家都在问