REST Django - Как изменить сериализованный файл до того, как он будет помещен в модель

Я надеюсь, что смогу найти способ изменить размер загруженного файла изображения до того, как он будет помещен в базу данных. Я новичок в 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 для проверки и/или изменения значений из словаря 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
Вернуться на верх