Django не может установить атрибут при изменении url медиафайла

Я создаю функцию, в которой я хочу, чтобы каталог файла менялся, если меняется image_type, например, если image_type это aerial_view, то он должен быть в одной папке, а если это detailed_view, то он должен переместиться в другую.

Файл успешно перемещается, однако я сталкиваюсь с can't set attribute при изменении url изображения.

Я не уверен, что это лучший способ изменить папку файла MEDIA, я хотел бы получить предложения, если есть лучший способ.

    def post(self, request):
        image_ids = dict((request.data).lists())['image_id']
        image_types = dict((request.data).lists())['image_type']
        arr = []

        for img_id, img_type in zip(image_ids, image_types):
            image_qs = RoofImages.objects.get(id=img_id)
            image_qs.image_type = img_type

            print(BASE_DIR)

            try:
                if image_qs.image_type == 'detailed_view':
                    full_image_url = f'{BASE_DIR}{image_qs.image.url}'
                    full_new_image_url = full_image_url.replace('aerial_view', 'detailed_view')
                    shutil.move(full_image_url, full_new_image_url)
                    image_qs.image.url = str(image_qs.image.url).replace('aerial_view', 'detailed_view')
            except Exception as e:
                print(e)

            try:
                if image_qs.image_type == 'aerial_view':
                    full_image_url = f'{BASE_DIR}{image_qs.image.url}'
                    full_new_image_url = full_image_url.replace('detailed_view', 'aerial_view')
                    shutil.move(full_image_url, full_new_image_url)
                    image_qs.image.url = str(image_qs.image.url).replace('detailed_view', 'aerial_view')
            except Exception as e:
                print(e)

            arr.append({img_id: img_type})

            image_qs.save()

        response_content = {
            'status': True,
            'message': 'Images type change successfully.',
            'result': arr
        }
        return Response(response_content, status=status.HTTP_201_CREATED)

Немного погуглив, мы можем изменить атрибут, используя instance.field.name вместо instance.field.url.

            try:
                if image_qs.image_type == 'detailed_view':
                    full_image_url = f'{BASE_DIR}{image_qs.image.url}'
                    full_new_image_url = full_image_url.replace('aerial_view', 'detailed_view')
                    shutil.move(full_image_url, full_new_image_url)
                    new_image_url = str(image_qs.image.url).replace('aerial_view', 'detailed_view')
                    image_qs.image.name = new_image_url
            except Exception as e:
                print(e)

            try:
                if image_qs.image_type == 'aerial_view':
                    full_image_url = f'{BASE_DIR}{image_qs.image.url}'
                    full_new_image_url = full_image_url.replace('detailed_view', 'aerial_view')
                    shutil.move(full_image_url, full_new_image_url)
                    new_image_url = str(image_qs.image.url).replace('detailed_view', 'aerial_view')
                    image_qs.image.name = new_image_url
            except Exception as e:
                print(e)
Вернуться на верх