Problems trying to update a record wi a imagefield base64 with django rest framework using drf_extra_fields Base64ImageField

25 views Asked by At

I'm trying to correct a Django rest framework API that must save an imagefield with base64 character set image file. I'm doing something wrong but not sure what it is, here my code in details.

In settings

BASE_DIR = Path(__file__).resolve().parent.paren

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

In my models.py

firma_pax = models.ImageField(blank=True, upload_to='img')

My database is an Oracle Database, CLOB datatype for column firma_pax

\-- In my serializers.py
from drf_extra_fields.fields import Base64ImageField
from .models import Scresolipaxservi

class ScreSoliPaxServiFirmSerializer(serializers.ModelSerializer):
firma_pax = Base64ImageField(max_length=4000, required=False)

    class Meta:
        model = Scresolipaxservi
        fields = ['firma_pax']
    
    def update(self, instance, validated_data):
        instance.firma_pax = validated_data.get('firma_pax', instance.firma_pax)
        return Scresolipaxservi.objects.filter(pk=instance.id).update(firma_pax=instance.firma_pax.url)

In my Api View

from rest_framework.decorators import api_view
from clientes.serializers import ScReSoliPaxServiSerializer, ScreSoliPaxServiFirmSerializer
from .models import Scresolipaxservi

@api_view(\['GET','PUT'\])
def ReservaPax(request,pk=None):
\#Consulta de la reserva
reserva = Scresolipaxservi.objects.get(id=pk)

    **# Validate if exits**
    if reserva:
       ** #Query: **
        if request.method == 'GET':
            reserva_serializer = ScReSoliPaxServiSerializer(reserva)
            return Response(reserva_serializer.data, status=status.HTTP_200_OK)
    
        **#Update: Image **
        if request.method == 'PUT':
            reserva_serializer = ScreSoliPaxServiFirmSerializer(reserva, data=request.data)
            if reserva_serializer.is_valid():
                reserva_serializer.save()
                return Response(status=status.HTTP_200_OK)
            return Response(reserva_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    
    return Response({'message':'Reserva No Existe'}, status=status.HTTP_400_BAD_REQUEST)

This API work fine with the EndPoint that Query the record with GET method, but the update just set a value like /media/7e94085e-b6f5-4e51-9bfd-ee18ff803bc1.jpg to the firma_pax field and not file is saved in img folder.

I am not an expert, I'm sure I'm doing something very very wrong, please help.

I'm trying to update the record with the image but is not working fine, not image is save to folder 'img' and field just save a value like /media/7e94085e-b6f5-4e51-9bfd-ee18ff803bc1.jpg

0

There are 0 answers