Django中使用Serializer验证POST参数失效问题咨询
问题原因与解决方法
你的序列化器始终验证通过的核心问题是每个字段定义末尾多了逗号,导致这些字段被解析成了元组,而非DRF的字段实例,序列化器相当于没有定义任何需要验证的字段,所以无论传入什么数据都会显示验证通过。
修正后的序列化器代码
去掉每个字段末尾的逗号即可:
class SaveTab1Serializer(Serializer): gage_id = CharField(min_length=1, required=True) forcing_source = CharField(min_length=1, required=True) forcing_path = CharField(min_length=1, required=True)
额外优化:视图简化
DRF会自动解析请求体,你不需要手动调用json.loads(request.body),直接使用request.data即可:
@api_view(['POST']) def save_tab1(request): ser = SaveTab1Serializer(data=request.data) print('serializer', ser.is_valid()) print('errors', ser.errors)
为什么逗号会导致问题?
在Python中,单个元素末尾加逗号会被解析为元组,比如gage_id = CharField(...), 等价于gage_id = (CharField(...),)。DRF的序列化器只会识别类属性中是字段实例的成员,元组不会被当作有效字段处理,所以你的序列化器没有任何需要验证的规则,自然永远返回验证通过。
内容的提问来源于stack exchange,提问作者Peter Kronenberg
相关产品推荐
相关产品推荐

