使用 FileField 在 Django 中保存原始文件名
Posted
技术标签:
【中文标题】使用 FileField 在 Django 中保存原始文件名【英文标题】:Saving Original File Name in Django with FileField 【发布时间】:2013-06-25 16:57:17 【问题描述】:def generate_uuid_file_name(self, filename):
self.original_filename = filename
extension = filename.rsplit('.', 1)[1]
newfilename = uuid.uuid4().__str__() + '.' + extension
return self.directory() + newfilename
class FileUpload(models.Model):
original_filename = models.CharField(max_length=128)
fileobj = models.FileField(upload_to=generate_uuid_file_name)
上传时,
"errors": "original_filename": ["This field is required."], "success": false
在 FileUpload.original_filename 中添加 blank=True, null=True 可以让上传成功,但不会保存原始文件名。在 Django 1.5 上。根据this post,这应该可行。
【问题讨论】:
【参考方案1】:在视图中执行此操作(在 null=True 之后,blank=True 再次成为模型的一部分):
file_object = UploadFileForm.save(commit=False)
file_object.original_filename = request.FILES['file'].name
file_object.save()
请注意,您需要根据上下文等相应地更改上述代码
【讨论】:
所以,这完全奏效了。但是,我仍然有点困惑为什么上面的 self.original_filename 没有?我的理解是它是通过引用传递的,所以原始代码应该可以工作? 如果original_filename
字段在fileobj
字段之前,它会起作用。
伙计,我喜欢 django。
如果您的模型与另一个模型具有多对多关系,您应该在建议代码的末尾使用file_object.save_m2m()
。以上是关于使用 FileField 在 Django 中保存原始文件名的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 的 FileField 中保存来自传入电子邮件的附件?
如何将 NamedTemporaryFile 保存到 Django 中的模型 FileField 中?
Django - 如何创建文件并将其保存到模型的 FileField?