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

如何将当前已认证用户传递给Django REST Framework序列化器

解决方案

有两种DRF官方推荐的优雅实现方式,均符合框架设计规范:

方案1:重写视图的perform_create方法(推荐单视图场景使用)

这是最常用的实现方式,逻辑清晰,适配单个视图的场景:

  1. 首先调整序列化器,将user字段设为只读,避免前端传入非法值覆盖后端赋值:
class ProfessionalSerializer(serializers.ModelSerializer):
    user = serializers.ReadOnlyField()
    class Meta:
        model = Professional
        fields = '__all__'
  1. 重写创建视图的perform_create方法,在序列化器保存时注入当前已认证用户:
from rest_framework.permissions import IsAuthenticated

class CreateProfessional(generics.CreateAPIView):
    serializer_class = ProfessionalSerializer
    # 新增权限校验,确保只有已登录用户可以访问接口,避免拿到匿名用户
    permission_classes = [IsAuthenticated]

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

方案2:重写序列化器的create方法(推荐多视图复用场景使用)

如果多个视图都用到该序列化器创建Professional实例,可以把赋值逻辑收敛到序列化器内,避免重复代码:

class ProfessionalSerializer(serializers.ModelSerializer):
    user = serializers.ReadOnlyField()
    class Meta:
        model = Professional
        fields = '__all__'
    
    def create(self, validated_data):
        # 序列化器默认会携带request上下文,直接取当前登录用户注入
        validated_data['user'] = self.context['request'].user
        return super().create(validated_data)

使用该方案时,视图不需要额外修改,只要保证视图配置了IsAuthenticated权限即可。


内容的提问来源于stack exchange,提问作者Luis Alfonso Buelvas Betancour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 23:33:02