【问题标题】:Saving Original File Name in Django with FileField使用 FileField 在 Django 中保存原始文件名
【发布时间】: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,这应该可行。

【问题讨论】:

    标签: django upload filenames


    【解决方案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()
    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 2014-08-09
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2023-03-30
    • 2015-06-09
    相关资源
    最近更新 更多