В мое веб-приложение приходит картинка по api в формате blob(она там обрезается пользователем) и мне нужно принять ее, преобразовать в imagefield и сохранить пользователю.
Я написал такой код в сериалайзере, ничего не менятеся и значение переменных мне тоже не посмотреть(точно ли validated_data в таком формате как я думаю).
serializers.py:
class ProfileSerializer(serializers.ModelSerializer):
# image = serializers.ImageField(use_url=True)
class Meta:
model = User
fields = ["first_name", "last_name", "email", "image"]
def create(self, validated_data):
user = User.objects.get(email=validated_data['email'])
user.update(**validated_data)
with io.BytesIO(validated_data['image']) as stream:
django_file = File(stream)
user.image.save('{}_profile_image'.format(user.email), django_file)
return user.save()
views.py:
class UserProfile(generics.RetrieveUpdateDestroyAPIView, generics.CreateAPIView):
queryset = User.objects.all()
serializer_class = ProfileSerializer
permission_classes = (IsAuthenticated,)
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
obj = queryset.get(pk=self.request.user.id)
# May raise a permission denied
self.check_object_permissions(self.request, obj)
return obj
def create(self, request, *args, **kwargs):
if not request.data:
return response.Response({"result": "data can`t be a blanks"}, status.HTTP_400_BAD_REQUEST)
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
return response.Response(serializer.data, status=status.HTTP_201_CREATED)