You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django DRF接口部署Heroku出现WSGIRequest无get属性错误如何解决

问题根因

错误的核心原因是你实例化序列化器时违反了DRF的参数规范:serializers.ModelSerializer的context参数要求传入字典类型,但你在视图的get方法中直接传入了request请求对象。

DRF内部存在大量对context的字典操作逻辑,比如序列化ImageField/FileField类型字段时,会自动调用context.get('request')获取请求对象来拼接资源的绝对访问地址,而原生WSGIRequest对象没有字典的get方法,因此触发了本次报错。

本地环境运行正常是因为本地调试时大概率没有触发调用context.get的逻辑:比如本地测试的文章image字段为空、或者本地DRF配置了UPLOADED_FILES_USE_URL = False不需要生成资源绝对URL,而Heroku环境的配置/数据触发了该逻辑,因此暴露了问题。

修复方案

需要修改两处代码:

  1. 修正视图中序列化器的传参逻辑,将context改为字典格式,把request对象存入字典的request键:
# 原错误代码
# serializer = self.serializer_class(post, context=request)
# 修正后代码
serializer = self.serializer_class(post, context={'request': request})
  1. 修正序列化器create、update方法中读取上下文用户的逻辑,先从context字典中取出request对象,再读取user属性:
# create方法原错误代码
# post = Post.objects.create(**validated_data, owner=self.context.user)
# 修正后代码
post = Post.objects.create(**validated_data, owner=self.context['request'].user)

# create方法中标签创建逻辑的原错误代码
# owner=self.context.user
# 修正后代码
owner=self.context['request'].user

# update方法中标签创建逻辑的原错误代码
# owner=self.context.user
# 修正后代码
owner=self.context['request'].user

修复后重新部署即可解决该报错。


内容的提问来源于stack exchange,提问作者Lutaaya Huzaifah Idris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:36:06