如何从序列化程序中获取用户?

How can I get user from serializer?

我正在尝试覆盖我的 views 中的 perform_update,从序列化程序中获取用户并将其分配给我的 Category 模型中的 updated_by

class Category(models.Model):
    name       = models.CharField(max_length=80)
    created_at = models.DateTimeField(auto_now_add = True, null = True)
    created_by = CurrentUserField()
    updated_at = models.DateTimeField(auto_now = True, null = True)
    updated_by = models.ForeignKey(User, default = None, blank=True, null=True, on_delete=models.DO_NOTHING, related_name="updated_by")
    deleted_at = models.DateTimeField(null = True)
    deleted_by = models.ForeignKey(User, default = None, blank=True, null=True, on_delete=models.DO_NOTHING, related_name='deleted_by')
    
    
    class Meta:
        verbose_name_plural = "Categories"

    def __str__(self):
        return self.name
    
    def soft_delete(self, deleter):
        self.deleted_by = deleter
        self.deleted_at = timezone.now()
        self.save()

序列化器

class CategorySerializer(serializers.ModelSerializer):
   
    class Meta:
        model = Category
        fields = "__all__"

观看次数:

class CategoryView(viewsets.ModelViewSet):
    serializer_class = CategorySerializer
    queryset = Category.objects.all()

    def get_permissions(self):
        if self.request.method == "GET":
            self.permission_classes = (AllowAny, )
        else:
            self.permission_classes = (IsAdminUser, )

        return super(CategoryView, self).get_permissions()

    def perform_update(self, serializer):
        instance = self.get_object()
        instance.updated_by = username
        serializer.save()
    

    def destroy(self, request, *args, **kwargs):
        instance = self.get_object()
        deleter = self.request.user
        self.perform_destroy(instance, deleter)
        return Response(status=status.HTTP_204_NO_CONTENT)

    def perform_destroy(self, instance, deleter):
        instance.soft_delete(deleter)

用户可通过请求获得,而不是序列化程序。您已经在 destroy() 中使用 self.request.user,您可以在 perform_update()

中做同样的事情
def perform_update(self, serializer):
    serializer.save(updated_by=self.request.user)