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