Ошибка в Django - [WinError 3] Система не может найти указанный путь - Django

Проблема заключается в следующем: я пытаюсь позволить пользователям загружать 5 изображений, и при загрузке я хочу, чтобы они меняли директорию.

Пока что мой views.py

class ProductCreateView(LoginRequiredMixin, CreateView):
    template_name = "product/add_product.html"
    success_url = reverse_lazy('home')
    form_class = ProductForm
    login_url = "/login/"


    # Save current user id as product_user_id in DB

    def form_valid(self, form, **kwargs):

        form.instance.product_user_id = self.request.user.id
        response = super().form_valid(form)

        id = form.instance.id
        picture_1 = form.instance.product_img_1
        picture_2 = form.instance.product_img_2
        picture_3 = form.instance.product_img_3
        picture_4 = form.instance.product_img_4
        picture_5 = form.instance.product_img_5
        product_title = form.instance.product_title
        user = form.instance.product_user_id

        # Change directory

        new_directory = change_directory(id, product_title, user, picture_1, picture_2, picture_3, picture_4, picture_5)

        return new_directory

utils.py

def change_directory(id, product_title, user, picture_1, picture_2, picture_3, picture_4, picture_5):

    file_name = f"{id}-{product_title}-{product_title}-{user}"
    new_path = os.path.join(settings.MEDIA_ROOT, "product_images", file_name)

    if not os.path.exists(new_path):
        os.makedirs(new_path)

    picture_list = [picture_1, picture_2, picture_3, picture_4, picture_5]

    for i in picture_list:
        old_image_path = os.path.join(settings.MEDIA_ROOT, f"product_images/{i}")
        new_image_path = os.path.join(settings.MEDIA_ROOT, f"product_images/{file_name}/{i}")
        os.rename(old_image_path, new_image_path)               

    return new_path

Решение не за горами, но у меня нет идей.

Если это поможет:

models.py

class Product(models.Model):
    product_title = models.CharField(max_length=255)
    product_description = models.TextField()
    product_description_short = models.CharField(max_length=255, blank=True)
    product_condition = models.CharField(max_length=100)
    product_code = models.CharField(max_length=100, blank=True)
    product_manufacturer = models.CharField(max_length=100, blank=True)
    product_location_state = models.CharField(max_length=100)
    product_location_city = models.CharField(max_length=100)
    product_delivery_time = models.IntegerField()
    product_category = models.ForeignKey(ProductCategory, on_delete=models.CASCADE, related_name='products')
    product_img_1 = models.ImageField(upload_to="product_images", blank=True)
    product_img_2 = models.ImageField(upload_to="product_images", blank=True)
    product_img_3 = models.ImageField(upload_to="product_images", blank=True)
    product_img_4 = models.ImageField(upload_to="product_images", blank=True)
    product_img_5 = models.ImageField(upload_to="product_images", blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2, default=0.0)
    product_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user')
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.product_title

forms.py

class ProductForm(ModelForm):

    class Meta:
        model = Product
        fields = [
        'product_title',
        'product_description',
        'product_description_short',
        'product_condition',
        'product_code',
        'product_manufacturer',
        'product_location_state',
        'product_location_city',
        'product_delivery_time',
        'product_category',
        'product_img_1',
        'product_img_2',
        'product_img_3',
        'product_img_4',
        'product_img_5',
        'price'
        ]

Ошибка: [WinError 3] Система не может найти указанный путь: 'C:\Users\rener\OneDrive\Desktop\Web developer bootcamp\Enda projektid\Ecom\project-ecom\ecom\media\product_images/product_images/DSC_0922_yhSMaeD. JPG' -> 'C:\Users\rener\OneDrive\Desktop\Web developer bootcamp\Enda projektid\Ecom\project-ecom\ecom\media\product_images/15-Autouus-Autouus-2/product_images/DSC_0922_yhSMaeD.JPG'

Я ожидаю, что он сначала загрузит их в папку product_images, а затем переместит их в папку product_images/{имя_файла}.

После некоторого времени поиска в интернете я нашел немного другой способ сохранения изображений в папку, отличную от корневой. Это намного быстрее и проще, но, к сожалению, при таком способе у вас не будет доступа к id продукта.

Как я понимаю, нет возможности получить id товара перед его сохранением, но есть возможность получить доступ к другим полям.

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