My target is how to make ImageField() as optional in case user does not want to submit an image.
When I use django Forms, then the ImageField() will work fine where the field will be treated as optional. Whereas, when I use Django "class FleetSerializer(serializers.ModelSerializer):" then the ImageField() will not be treated as optional.
Any solution for this huge problem of mine? Thanks a million.
Here is the complete code: MODELS, SERIALIZERS, VIEWS where my objective is to have REST API with field 'licRegImage' as optional. This code is aimed towards Flutter/Dart frontend why I prefer to use SERIALIZERS.
For over two weeks now I have not been able to find a solution. I suspect it may be related to compatibility issues, or worst bugs.
- From Requirements.txt:
- Django==3.2.16
- djangorestframework==3.13.1
- djongo==1.3.6
- pymongo==3.12.1
- djangorestframework==3.13.1
- Pillow==9.2.0
- etc., etc.
MODELS:
from djongo import models
class Fleet(models.Model):
usrRegId = models.CharField(max_length=28)
fleetId = models.CharField(max_length=13)
vinNr = models.CharField(max_length=35)
licRegNr = models.CharField(max_length=35)
licRegExpire = models.CharField(max_length=10)
licRegImage = models.ImageField(null=True, blank=True, upload_to='astfleet/imglicReg/', default = 'sys_global/images/no_image.png')
objects = models.DjongoManager()
class Meta:
db_table = "ast_fleet"
def __str__(self):
return self.usrRegId
SERIALIZERS:
class FleetRegistrationSerializer(serializers.ModelSerializer):
class Meta:
model = Fleet
fields =(
'usrRegId',
'fleetId',
'vinNr',
'licRegNr',
'licRegExpire',
'licRegImage',
)
extra_kwargs = {
'usrRegId':{'write_only':True},
'fleetId':{'write_only':True},
'licRegImage':{'required':False},
}
VIEWS:
class astFleetRegistration(APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
newFleet = {
'usrRegId' : request.user.usrRegId,
'fleetId' : fleetId_new,
'vinNr' : request.data['vinNr'],
'licRegNr' : request.data['licRegNr'],
'licRegExpire' : request.data['licRegExpire'],
'licRegImage' : request.data['licRegImage'],
}
serializers = FleetRegistrationSerializer(data=newFleet)
if serializers.is_valid():
serializers.save()
getResponse = {'SUCCESS' : 0,
'MESSAGE' : 'New fleet was successfully registered',
'ACTION' : 'Check your Email for details',
'DATA' : [serializers.data]}
return JsonResponse(getResponse, status=status.HTTP_200_OK, safe=False)
getResponse = { 'SUCCESS' : 1,
'MESSAGE' : 'Input cannot be serialized',
'ACTION' : 'Please check your input and submit again'}
return JsonResponse(getResponse, status=status.HTTP_400_BAD_REQUEST)
when you work with django rest framework it expect image as base64 file
so you can use
django-extra-fieldslib to convert image to base64 and store itdjango-extra-fields reference