Django序列化含空格字段报错:source参数无效如何解决?
Django Serializer处理带空格数据源字段的错误解决
你的问题出在对source参数的理解偏差上:source是**序列化(对象转字典)时用来指定从数据源(比如模型实例)读取值的路径,而不是在反序列化(传入的字典转内部数据)**阶段用来匹配输入字段名的。
当你调用is_valid()时,Serializer会检查传入的data中是否存在序列化器定义的cat_name字段,但你的输入只有Cat name,所以会触发"该字段必填"的错误。
解决方法1:重写to_internal_value方法(推荐,不修改原始数据源)
通过重写反序列化的核心方法,手动完成带空格字段到序列化器字段的映射:
class MySerializer(serializers.Serializer): cat_name = serializers.CharField() def to_internal_value(self, data): # 把原始数据的'Cat name'映射到序列化器的cat_name字段 processed_data = { 'cat_name': data.get('Cat name') } # 调用父类方法完成后续验证 return super().to_internal_value(processed_data) # 使用示例 s = MySerializer(data={'Cat name': 'Smith'}) s.is_valid(raise_exception=True) print(s.validated_data) # 输出: {'cat_name': 'Smith'}
解决方法2:临时转换字段名(不修改原始数据源)
如果场景简单,可以复制原始数据并转换字段名后再传入Serializer:
original_data = {'Cat name': 'Smith'} # 基于原始数据生成符合序列化器要求的输入字典 serializer_input = {'cat_name': original_data['Cat name']} s = MySerializer(data=serializer_input) s.is_valid(raise_exception=True)
内容的提问来源于stack exchange,提问作者PythonForEver
相关产品推荐
相关产品推荐

