2016-06-15 1 views
1

В этой модели, я хочу, чтобы изменить имя файла загруженного в ImageFieldИзменение имени файла при загрузке с использованием идентификатора в Django ImageField

class Product(models.Model): 
    image = models.ImageField(upload_to=content_file_name) 
    name = models.CharField(max_length=100) 
    amount = models.PositiveIntegerField() 

    class Meta: 
     ordering = ('name',) 

    def __str__(self): 
     return self.name 

Чтобы изменить имя образа Я использую эту функцию

def content_file_name(instance, filename): 
    ext = filename.split('.')[-1] 
    filename = '%s.%s' % (instance.id, ext) 

    return os.path.join('products', filename) 

но имя моего изображения отсутствует, если я использую другие поля, такие как «имя», он работает. Что делать, чтобы изменить имя с идентификатором? Благодаря!

ответ

3

экземпляр, id еще не создан, так как функция upload_to называется перед тем новый объект сначала записываются в базу данных.

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

Выделено из Django docs

двух альтернатив:

Используйте значение uuid.uuid4(), его легко создать и уникален, как pk.

Другое предложение, если вас интересуют поисковые системы и SEO, используйте slugify(instance.name), чтобы ваши изображения могли быть проще найти при поиске изображений в поисковых системах.

+0

спасибо за предложения, я попробую их. еще раз спасибо. –

Смежные вопросы