REST Django - 如何在将序列化文件放入模型之前对其进行修改

REST Django - How to Modify a Serialized File Before it is Put Into Model

我希望我能找到一种方法在将上传的图像文件放入数据库之前调整其大小。 我是 Django 的 REST 新手,所以我不确定如何完成。似乎任何被序列化的东西都只是自动地直接进入模型。我想这就是重点(设置起来当然很容易)。

澄清一下,我已经测试并运行了一个可以为我调整图像大小的功能。这可以根据需要进行修改,对我来说没问题。问题实际上是关于某种程度上的“拦截”图像,进行我的更改,然后将其放入模型中。有人可以帮我提出一些策略来完成这项工作吗?谢谢

模特:

class Media(models.Model):
    objects = None
    username = models.ForeignKey(User, to_field='username',
                                 related_name="Upload_username",
                                 on_delete=models.DO_NOTHING)
    date = models.DateTimeField(auto_now_add=True)
    media = models.FileField(upload_to='albumMedia', null=True)
    file_type = models.CharField(max_length=12)
    MEDIA_TYPES = (
        ('I', "Image"),
        ('V', "Video")
    )
    media_type = models.CharField(max_length=1, choices=MEDIA_TYPES, default='I')

    user_access = models.CharField(max_length=1, choices=ACCESSIBILITY, default='P')

    class Meta:
        verbose_name = "MediaManager"

使用 post 方法的视图:

class MediaView(APIView):
    queryset = Media.objects.all()
    parser_classes = (MultiPartParser, FormParser)
    permission_classes = [permissions.IsAuthenticated, ]
    serializer_class = MediaSerializer

    def post(self, request, *args, **kwargs):
        user = self.request.user
        print(user.username)
        request.data.update({"username": user.username})
        media_serializer = MediaSerializer(data=request.data)
        # media_serializer.update('username', user.username)
        if media_serializer .is_valid():
            media_serializer.save()
            return Response(media_serializer.data, status=status.HTTP_201_CREATED)
        else:
            print('error', media_serializer.errors)
            return Response(media_serializer.errors,status=status.HTTP_400_BAD_REQUEST)

序列化程序:

class MediaSerializer(serializers.ModelSerializer):
    class Meta:
        model = Media
        fields = '__all__'
    def to_representation(self, instance):
        data = super(MediaSerializer, self).to_representation(instance)
        return data

您可以使用 validate 方法验证 and/or 更改 data 字典中的值。

class MediaSerializer(serializers.ModelSerializer):
    ...
    def validate(self, data):
        value_from_form = data['value_from_form']
        
        value_from_form = 'Something else'

        data['value_from_form'] = value_from_form 

        return data