0

我想存储上传的“原始”文件名。这是因为文件以 uuid 作为新名称存储。所以我为我的模型写了这个:

 def save(self, *args, **kwargs):
         if self.file:
             self.original_filename = self.file.name
         super(MediaFile, self).save(*args,**kwargs)

但是,当没有上传任何新内容时,它也会将文件名存储到 self.original_filename。因此 original_filename 在我第二次保存此模型时成为 uuid(例如更新管理员中的某些其他字段)。

如果 FileField 确实已更新并且文件已上传,如何检查保存功能?如果可能的话,我想在模型中执行此检查,以便 mit 对管理和自定义上传页面都有效。

4

1 回答 1

1

您可以调整__init__存储原始文件的方法。这允许您在save()方法中检索原始文件并将其与新文件进行比较。

        __original_file = None

        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.__original_file = self.file

        def save(self, *args, **kwargs):
            if self.file:
                if self.file != self.__original_file:
                    self.original_filename = self.file.name

            super(MediaFile, self).save(*args,**kwargs)
            self.__original_file = self.file
于 2021-12-18T19:49:06.333 回答