Django REST Framework序列化器无故返回null,数据库有数据仍为空如何解决
问题根因
你代码里存在两个核心错误:
- 序列化器参数使用错误:将ORM查询得到的实例集传给了仅用于反序列化的
data参数。序列化已有模型实例时,需要传入instance参数,仅在接收前端传入数据、需要写入数据库的反序列化场景下才需要使用data参数、调用is_valid()做校验。 - 返回体未包含业务数据:你构造的返回字典中仅声明了
status字段,没有将序列化后的产品数据放入返回结果,接口自然不会返回产品相关内容。
你之前遇到的断言错误,是DRF针对反序列化场景的限制:使用data参数初始化序列化器后,必须先调用is_valid()才能访问序列化结果,而你传入的是ORM实例集,本身不符合反序列化的入参格式要求,所以即便调用is_valid()也会校验失败,拿不到有效数据。
修正后的视图代码
@api_view(['GET']) def get_data(request): product_data = Product.objects.all() # 序列化场景传instance参数,不需要调用is_valid serialized_data = ProductSerializer(instance=product_data, many=True) return Response({ "status": "success", "data": serialized_data.data })
序列化器代码无需修改。
内容的提问来源于stack exchange,提问作者Atif Shafi
相关产品推荐
相关产品推荐

