ImageFile не работает, не знаю, в чем проблема в

Я пытаюсь загрузить картинку, но ничего не получается. Никакой ошибки не возвращается, вроде если она загружена и отпечатки self.validated_data['picture'] или serializer.self.validated_data['picture'] не пустые, но 'picture' в JSON остается null - так не должно быть. Ничего не загружается в медиафайлы, ничего нет в DB

Виды

@api_view(['GET', 'POST'])
def api_pictures(request):
if request.method == 'GET':
    pictures = Picture.objects.all()
    serializer = PictureSerializer(pictures, many=True)
    return JsonResponse(serializer.data, safe=False)

if request.method == 'POST':
    serializer = PictureSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        print(serializer.validated_data['picture'])
        return Response(serializer.data, status=status.HTTP_201_CREATED)

    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

#Модели

class Picture(models.Model):
    pic_name = models.CharField(max_length=255, blank=True)
    picture =models.ImageField(upload_to='media_site/',blank=True,
height_field='height', width_field='width')
    url = models.URLField(blank=True, null=True, max_length=500)
    height = models.IntegerField(blank=True, null=True)
    width = models.IntegerField(blank=True, null=True)

#Urls

urlpatterns = [
    path("admin/", admin.site.urls),
    path("api/", include(router.urls)),
    path("api/images/", api_pictures),
    path("api/images/<int:pk>", detail_pictures),
]

#Serializers.py

class PictureSerializer(serializers.ModelSerializer):
    @staticmethod
    def name_parser(object_name):
        parser = re.search(r'[^/]*$', str(object_name))
        return parser[0]
def save(self):
    if 'picture' not in self.validated_data.keys():
        url = self.validated_data['url']
        result = urllib.request.urlopen(url=url)
        img = BytesIO(result.read())
        converted_img = InMemoryUploadedFile(img, None, self.name_parser(url),
                                             'image/jpeg', sys.getsizeof(img), None)
        print(converted_img)
        self.validated_data.update({'picture': converted_img})
    else:
        self.validated_data.update({'picture': self.validated_data['picture']})
    if 'pic_name' not in self.validated_data.keys():
        name = self.name_parser(self.validated_data['picture'])
        self.validated_data.update({'pic_name': name})

class Meta:
    model = Picture
    fields = ('id', 'pic_name', 'picture', 'url', 'width', 'height', 'parent_picture')

результат

postman screen

Но 'picture' не должно быть null :((((

Когда я загружаю его, self.validated_data['picture'] не пуст. Django не выдает ошибку.

Я нашел решение, я должен был инициализировать super.save() после переопределения функции в PictureSerializer классе.

Вернуться на верх