Установка поля ImageField "upload_to" продукта на основе названия его категории - Django

class Product(models.Model):
    
    category=models.ForeignKey(Category, on_delete=models.CASCADE,
                             related_name='product_category', to_field='category_name')
    name=models.CharField(max_length=255,)
    description=models.CharField(max_length=255)
    
    ***************************************************  
    images=models.ImageField(upload_to='products/'+str(category.category_name), blank=True,null=True)
    ***************************************************
   
    price=models.DecimalField(decimal_places=2,max_digits=7)
    discount=models.DecimalField(decimal_places=2,max_digits=3,
                                 validators=[MinValueValidator(0),MaxValueValidator(0.99)])
    
    def __str__(self):
        return self.name

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

Вы можете добавить функцию для установки обозначения места загрузки изображения

import os
def product_image_location(instance, filename):
    upload_path = f"products/{instance.category.category_name}"
    
    return os.path.join(upload_path, filename)

class Product(models.Model):
    .....
    category=models.ForeignKey(Category, on_delete=models.CASCADE)
    images=models.ImageField(upload_to=product_image_location, blank=True,null=True)
    .....
    

Использование функции 'product_image_location' в качестве значения 'upload_to'

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