Django 1.11
调用FileUpdate时,我用旧文件替换旧文件 . 我想处理旧文件 . 即将其移动到其他目录 .
你能看看下面的图片吗?新文件称为“C book 1.pdf” . 现有文件名为“4_Oracle_Database_11g_PLSQL_Fundamentals_PLSQL.pdf” .
但是在断点处(参见form_valid中的注释),old_file_name = C book 1.pdf .
但我无法理解为什么 . 我在几行中调用super(FileUpdate,self).form_valid(form) . 只有self.object = form.save() .
在断点处,我希望self.object成为未改变的对象 . 现有的 .
Could you help me understand how to catch the file name of the old file.
class UserFile(models.Model):
uuid = models.UUIDField(primary_key=False, default=uuid.uuid4,
editable=False)
user_file = models.FileField(verbose_name=_("file"),
max_length=255,
upload_to=get_file_path)
class FileUpdate(UpdateView):
model = UserFile
form_class = FileForm
def form_valid(self, form):
"""
Delete old file.
"""
parent_directory = get_parent_directory_of_file(self.object)
old_file_name = self.object.user_file.name # Breakpoint
self.object.user_file.delete()
return super(FileUpdate, self).form_valid(form)
这是形式:
1 回答
EDIT :要捕获文件名,您可能希望在调用
is_valid()
之前从文件的数据中获取它 - 即在模型事务发生之前从对象实例获取它 .关于删除旧文件..
我认为调用
.delete()
实际上并没有删除该文件 - 请参阅here .页面摘录:
这意味着存储在数据库中的内容实际上只是文件的路径名/ url - 而不是实际的文件本身 . 所以当你拨打
delete()
时,你基本上是 only deleting the pathname .要删除文件,您必须使用os标准库:
你可以这样做:
更多关于
os.remove()
的os.remove()
. 我没有测试过这个,但我想你可以试一试 .