purpose
I want to make POST parameter
image
can be filled withurl
file
base64
but save as a image.
code
models.py
class Item(models.Model):
image = models.ImageField(upload_to='item')
...
views.py
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
def create(self, request):
if request.data.get('type') == 'url':
request.POST._mutable = True
request.data['image'] = convert_from_url(request.data['image'])
serializer = ItemSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
I modify the request data when input type is url.
convert_from_url is a method to save a image to TemporaryFile
and pack in InMemoryUploadedFile
serializers.py
class ItemSerializer(serializers.ModelSerializer):
def create(self, validated_data):
item = Item.objects.create(
image=validated_data['image']
)
...
item.save()
return item
Problem
serializer = ItemSerializer(data=request.data)
this line didn't pass correct request.data (it didn't contain data)
validated_data
(serializers) didn't get image when I modified it before