微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

django - 包括月份和年份的动态上传路径不起作用

如何解决django - 包括月份和年份的动态上传路径不起作用

我想上传带有动态路径的文件,即 YEAR/MONTH//FILES

为了实现这一点,我使用以下代码

def user_directory_path(instance,filename):
    return '%Y/%B/{0}/files/{1}'.format(instance.retailer.retailer_id,filename)

class FileUpload(models.Model):
    file = models.FileField(upload_to=user_directory_path)
    car = models.ForeignKey(CarMaster,on_delete=models.CASCADE,default=None)

class CarMaster(models.Model):
    user = models.ForeignKey(User,default=None,on_delete=models.CASCADE)
    car_id = models.PositiveIntegerField(unique=True)
    car_name = models.CharField(max_length=1000)

创建的文件夹结构如下

media\%Y\%B\100000\files

此处 %Y 和 %B 应替换为年份和月份名称,但未发生。

有什么办法可以做到这一点。

解决方法

试试这个:

import os
import time
import uuid

from django.conf import settings


def prepare_directory(name: str) -> str:
   """
   Prepare a dynamic directory.
   """

   data_dirs_datetime = str(time.strftime("%y/%m"))

   file_path = os.path.join(f"{settings.MEDIA_ROOT}/{name}/{data_dirs_datetime}")

   if not os.path.exists(file_path):
      os.makedirs(file_path)

   return file_path


def user_directory_path(instance,filename: str) -> str:
   """
   Prepare path for files.
   """

   file_path = prepare_directory(name="files")

   _,ext = os.path.splitext(filename)

   file_name = str(uuid.uuid4())

   _path = f"{file_path}/{file_name}{ext}"

   return os.path.join(_path)
,

我能够通过可调用的upload_to实现

def local_directory_path(instance,filename):
    now = instance.file_month
    return '{0}/{1}/{2}/{3}'.format(now.strftime('%Y'),now.strftime('%B'),instance.car.car_id,filename)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。