Django项目序列化Connection模型时出现user字段AttributeError报错
问题原因与解决方案
疑问1解答
你使用的ModelSerializer配置了fields = '__all__',会自动根据关联的Connection模型生成所有字段的序列化规则,包括user、exchange两个外键字段,不需要手动自定义声明。因此序列化过程中会自动尝试从传入的对象上读取这些字段的值,才会触发对应报错。
疑问2解答
报错中'QuerySet' object has no attribute 'user'的含义是:你传给序列化器的connections是调用.all()得到的QuerySet集合对象,属于多个Connection实例的容器,而序列化器默认按照「单个Connection实例」的规则解析数据,直接尝试对整个QuerySet对象读取user属性,但QuerySet本身不存在这个属性,只有它内部存储的每一个单独的Connection实例才拥有user属性,因此触发属性不存在的错误。
修复方法
实例化序列化器时添加many=True参数,告诉序列化器当前传入的是多个实例的集合,需要遍历每个实例分别序列化即可,修改视图list方法的返回逻辑:
# 原代码 # return Response(self.serializer_class(connections).data, status=status.HTTP_200_OK) # 修正后代码 return Response(self.serializer_class(connections, many=True).data, status=status.HTTP_200_OK)
内容的提问来源于stack exchange,提问作者Paul Bénétéau
相关产品推荐
相关产品推荐

