Python中Django REST framework的serializer如何定义参数以接收JSON中的中划线字段?

譬如 参数长这样

{
  "input": {
    "subscriber-id":"Hector",
    "current-internet-package": "ADAS02",
    "target-internet-package": "ADAS01",
  }
}

Python中Django REST framework的serializer如何定义参数以接收JSON中的中划线字段?
2 回复

在Django REST framework的serializer里,JSON数据里的中划线字段名(比如user-name)不能直接映射到Python的类属性(因为属性名里不能有中划线)。你得用source参数来手动指定映射关系。

看这个例子,假设你的JSON长这样:

{
  "user-name": "张三",
  "user-age": 25
}

你的serializer应该这么定义:

from rest_framework import serializers

class UserSerializer(serializers.Serializer):
    # 在serializer字段里用合法的Python变量名(比如user_name),
    # 然后通过source='user-name'指向JSON里的实际字段名
    user_name = serializers.CharField(source='user-name')
    user_age = serializers.IntegerField(source='user-age')
    
    def create(self, validated_data):
        # 这里处理创建逻辑,validated_data里的键已经是'user-name'和'user-age'了
        pass
    
    def update(self, instance, validated_data):
        # 更新逻辑
        pass

关键点就一个:在serializer字段里用source参数来桥接命名差异。这样框架在解析JSON时,就会自动把user-name的值赋给user_name字段。

简单说就是:用source参数搞定字段名映射。


回到顶部