使用FileField在Django中保存原始文件名

使用FileField在Django中保存原始文件名,django,upload,filenames,Django,Upload,Filenames,上传时 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(m

上传时

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)
将blank=True、null=True添加到FileUpload.original_文件名可以使上载成功,但不会保存原始文件名。关于Django 1.5。根据,这应该可以工作。

在视图中这样做(null=True之后,blank=True再次成为模型的一部分):


请注意,您需要根据您的上下文等相应地更改上述代码,因此,这完全有效。然而,我仍然有点困惑,为什么上面的self.original_文件名没有??我的理解是,它是通过引用传递的,所以原始代码应该可以工作?如果
original_filename
字段在
fileobj
字段之前,它就可以工作。伙计,我喜欢django。如果你的模型与另一个模型有多对多关系,你应该使用
file_object.save_m2m()
在建议的代码末尾。
{"errors": {"original_filename": ["This field is required."]}, "success": false}
file_object = UploadFileForm.save(commit=False)
file_object.original_filename = request.FILES['file'].name
file_object.save()