Файл Django FileField по умолчанию

У меня есть модель, которая содержит FileField, как показано ниже.

class Employer(models.Model):
        logo = models.FileField(storage=FileSystemStorage(location=settings.MEDIA_ROOT), upload_to='logos')

Вопрос в том, как добавить в это поле файл по умолчанию, например "{{MEDIA_ROOT}}/logos/anonymous.jpg"?


person brsbilgic    schedule 18.07.2011    source источник


Ответы (3)


Вы можете указать файл по умолчанию для использования в этом поле следующим образом:

class Employer(models.Model):
        logo = models.FileField(storage=FileSystemStorage(location=settings.MEDIA_ROOT), upload_to='logos', default='settings.MEDIA_ROOT/logos/anonymous.jpg')
person rolling stone    schedule 18.07.2011
comment
как параметр по умолчанию settings.MEDIA_ROOT интерполируется до правильного значения в строке? - person seanmus; 20.04.2017
comment
путь, который django будет использовать по умолчанию, (по умолчанию): settings.MEDIA_ROOT + '/' + 'your_path', поэтому убедитесь, что вы поместили туда свой файл по умолчанию - person Pedro Muñoz; 09.12.2020
comment
Не думаете, что это решение масштабируется в разных средах? Например, если производственный экземпляр работает под управлением S3, работает ли что-то вроде MEDIA_ROOT? И я думаю, что жестко закодированный FileSystemStorage тоже не работает. - person ankush981; 13.06.2021

Поскольку приведенное выше решение на самом деле не работало для меня (settings.MEDIA_ROOT не интерпретируется, и я хочу gitignore медиа-папку), вот (как-то хакерское) решение, которое позволяет мне указать статический файл по умолчанию в Image/FileField :

image = models.ImageField(upload_to="image/", default='..{}img/dashboard/default-header.jpg'.format(settings.STATIC_URL),
                          verbose_name=_(u'image'))

Хакерская часть заключается в том, что если у вас есть MEDIA_URL с более чем одним уровнем, «..» будет недостаточно (но тогда вы можете просто использовать «../../»).

person Papers.ch    schedule 04.01.2017

в вашем файле моделей

logo = models.FileField(upload_to='logos', default='logos/logo.png')
titre = models.CharField(max_length=100)

в настройках добавь

MEDIA_ROOT =  os.path.dirname(os.path.abspath(__file__))
MEDIA_URL = '/logos/'
person Geyd    schedule 17.07.2018