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

DRF序列化器报AttributeError无request属性,如何在validate中获取当前用户?

解决Django REST Framework序列化器validate方法中访问当前用户的问题

序列化器本身并不直接持有request对象,你需要通过序列化器的context属性来获取当前请求的request对象。DRF在视图中实例化序列化器时,默认会将request纳入context参数中传递给序列化器。

修改你的validate方法代码如下:

class MySerializer(serializers.ModelSerializer):
    class Meta:
        model = models.MyClass
        fields = "__all__"

    def validate(self, data):
        role = data["role"]
        # 从context中获取request对象
        request = self.context['request']
        roles = models.Role.objects.filter(
            organization=request.user.organization
        )
        if role not in roles:
            raise serializers.ValidationError("Invalid role selected")
        return data  

补充说明:

  • 如果你的视图是手动实例化序列化器(而非使用DRF内置的视图类如ModelViewSet),需要在实例化时手动传递context:
    serializer = MySerializer(data=request.data, context={'request': request})
    
  • 注意修正原代码中的拼写错误:"Invlid"改为"Invalid"

内容的提问来源于stack exchange,提问作者Waleed Farrukh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:05:26