Django上传CSV文件重命名:扩展名前追加指定字符串_hello
实现方案
核心通过修改Django模型层FileField的upload_to参数实现,无需改动现有表单逻辑,同时满足两个需求:
1. 修改models.py代码
upload_to参数支持传入自定义函数,我们可以在函数中完成文件名重命名逻辑,代码如下:
import os from django.db import models from django.core.exceptions import ValidationError # 原有CSV格式校验方法保留 def validate_file_extension(value): if not value.name.endswith('.csv'): raise ValidationError(u'Only CSV files allowed.') # 新增自定义上传路径&重命名处理函数 def get_upload_path(instance, filename): # 拆分原文件的名称和后缀 file_name, file_ext = os.path.splitext(filename) # 按需求拼接新文件名:原名称+_hello+后缀 new_file_name = f"{file_name}_hello{file_ext}" # 返回最终的文件存储路径 return os.path.join('documents/user_files/', new_file_name) class user_file(models.Model): # 将upload_to参数从固定字符串改为自定义函数即可 user_file_csv = models.FileField(upload_to=get_upload_path, validators=[validate_file_extension])
2. 效果说明
- 基础需求自动满足:例如上传
test.csv,最终保存的文件名为test_hello.csv - 可选需求自动满足:重命名逻辑在文件写入存储前执行,不会先存储原文件名文件,直接用新文件名存入目标目录
- 重名冲突无需额外处理:如果出现同名文件,Django默认存储后端会自动在文件名后追加数字后缀(如
test_hello_1.csv),不会覆盖已有文件
内容的提问来源于stack exchange,提问作者user9849967
相关产品推荐
相关产品推荐

