如何解决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 举报,一经查实,本站将立刻删除。