django - 如何在 Django 模型中获取 upload_to 的当前日期

标签 django django-models

由于某些图像文件存在名称冲突,我决定让系统自动更改上传文件的名称。但是,更改系统后,我在获取文件路径的当前日期时遇到了麻烦。

这就是我之前的 Image 模型的样子,它存储名称类似于 boutique/index/2018/9/20/FILE_NAME.jpg 的图像。

class Image(TimeStampedModel):
    ...
    image = ImageField(..., upload_to='boutique/index/index/%Y/%m/%d')
    ...

之后我把它改成了这样。这成功地自动更改了上传图像的名称。但是,它存储的名称类似于 boutique/%Y/%m/%d/FILE_NAME.jpg

def image_path(instance, filename):
    basefilename, file_extension = os.path.splitext(filename)
    chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
    randomstr = ''.join((random.choice(chars)) for x in range(10))
    return 'boutique/index/%Y/%m/%d/{imageid}/{basename}{randomstring}{ext}'.format(imageid=instance.store.domainKey, basename=basefilename, randomstring=randomstr, ext=file_extension)

class Image(TimeStampedModel):
    ...
    image = ImageField(..., upload_to=image_path)
    ...

就像您在上面看到的那样,问题是 %Y%m%d 不提供日期数据我不再需要了。这里有什么问题吗? image_path 函数在同一位置返回相同的内容。我不知道为什么它们就像被识别为普通字符串

最佳答案

您必须手动设置这些值。

添加导入

from datetime import datetime

并将函数中的 %Y、%m、%d 替换为 {year}、{month}、{day} 变量,并将这些值添加到格式调用中。

def image_path(instance, filename):
    basefilename, file_extension = os.path.splitext(filename)
    chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
    randomstr = ''.join((random.choice(chars)) for x in range(10))
    _now = datetime.now()

    return 'boutique/index/{year}/{month}/{day}/{imageid}/{basename}{randomstring}{ext}'.format(
        imageid=instance.store.domainKey, 
        basename=basefilename, randomstring=randomstr, ext=file_extension,
        year=_now.strftime('%Y'), month=_now.strftime('%m'), day=_now.strftime('%d')
        )

有关 django 中文件上传的更多信息

关于django - 如何在 Django 模型中获取 upload_to 的当前日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52431806/

相关文章:

python - Django加权查询(带注释的值)

python - 无法将第三方 Markdown 扩展集成到 django-wiki Markdown 中

python - 如何在 GAE 中使用 django 翻译?

Django 项目 'site cant be reached'

django - 如何在 appengine 上的 django non-rel 上进行空间查询

带有过滤器参数的Django自定义管理器

sql - Django:将数据从一个数据库复制到另一个数据库

python - 无法保存 django 模板中的项目列表

python - 基于请求对象创建模型实例的方法

django-models - 为什么带有 Q() 表达式的 Django QuerySet 返回重复值?