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
相关产品推荐
相关产品推荐

