Django FileField 默认文件

Posted

技术标签:

【中文标题】Django FileField 默认文件【英文标题】:Django FileField default file 【发布时间】:2011-10-08 02:47:34 【问题描述】:

我有一个包含FileField 的模型,如下所示

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

问题是如何将“ MEDIA_ROOT/logos/anonymous.jpg”之类的默认文件添加到此文件字段?

【问题讨论】:

【参考方案1】:

在您的模型文件中

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/'

【讨论】:

【参考方案2】:

由于上面的解决方案对我来说并没有真正起作用(settings.MEDIA_ROOT 没有被解释,我想 gitignore 媒体文件夹)这里有一个(有点 hacky)解决方案,它允许我指定一个静态文件作为默认文件图片/文件字段:

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

棘手的部分是,如果您的 MEDIA_URL 包含多个级别“..”是不够的(但您可以简单地使用“../../”)。

【讨论】:

【参考方案3】:

您可以指定用于该字段的默认文件,如下所示:

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

【讨论】:

默认参数settings.MEDIA_ROOT如何被插入到字符串中的正确值? django 默认使用的路径是(默认):settings.MEDIA_ROOT + '/' + 'your_path',所以一定要把你的默认文件放在那里 不认为这个解决方案可以跨环境扩展吗?例如,如果生产实例运行 S3,MEDIA_ROOT 之类的东西会起作用吗?而且我认为硬编码的FileSystemStorage 也不起作用。

以上是关于Django FileField 默认文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中保留 FileField 的原始文件名

如何更新 Django 的 FileField 实例的文件名?

Django - 如何创建文件并将其保存到模型的 FileField?

如何更新/替换 Django FileField() 中的文件

使用 model.FileField 在 Django 中保存之前修改文件名

python 在Django模型的FileField之间复制文件