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参数搞定字段名映射。

