如何将当前经过身份验证的用户传递给Django rest框架序列化程序?

2024-09-28 05:17:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的模型:

class Professional(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    dummy_text = models.CharField(max_length=300)
    

类似这样的序列化程序:

class ProfessionalSerializer(serializers.ModelSerializer):
   class Meta:
      model = Professional
      fields = '__all__'

还有一个像这样的观点:

class CreateProfessional(generics.CreateAPIView):
    serializer_class = ProfessionalSerializer

问题是,我需要将给定请求的当前经过身份验证的用户作为序列化程序的用户来传递,我得到了一个错误,因为很明显,在我的模型中,用户字段是必需的,但是我找不到一种优雅的方法来这样做,我该怎么做呢


Tags: 用户模型程序model序列化onmodelsdelete
3条回答
    class CreateProfessional(generics.CreateAPIView):
         serializer_class = ProfessionalSerializer

        def create(self, request, *args, **kwargs):
            serializer = self.serializer_class(data=request.data, context={'request': request})
            serializer.is_valid(raise_exception=True)
            serializer.save()


    class ProfessionalSerializer(serializers.ModelSerializer):
        class Meta:
           model = Professional
           fields = '__all__'

        def create(self, validated_data):
            user = self.context['request'].user

这样,您就可以获得当前用户

在序列化程序元中将user设置为{}。这将阻止接受来自有效负载的user数据

class ProfessionalSerializer(serializers.ModelSerializer):
    class Meta:
        model = Professional
        fields = '__all__'
        read_only_fields = ["user"]

然后,重写视图类的perform_create(...)方法

class CreateProfessional(generics.CreateAPIView):
    serializer_class = ProfessionalSerializer

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

您可以使用类似validate_user的方法创建validate方法,并在内部执行以下代码

self.context['view'].request.user()

相关问题 更多 >

    热门问题