我有两个模型都有FileField
,如此:
class OriginalFile(models.Model):
docfile = models.FileField(upload_to=file_path)
class RevisedFile(models.Model):
newfile = models.FileField(upload_to=revisedfile_path)
originalfile = models.ForeignKey(OriginalFile, on_delete=models.PROTECT)
如您所见,首次上传文件时,会将其上传到file_path
模型中的OriginalFile
。但是,如果用户上传了同一文件的修订版,则会将其保存到revisedfile_path
模型中的RevisedFile
。
普通用户没有权利自己修改文件(这就是我当时没有替换原始文件的原因)。如果经理接受修改后的文件,则需要遵循以下事项:
docfile
OriginalFile
替换为newfile
RevisedFile
RevisedFile
的相关实例及其目录中保存的newfile
。 docfile
和newfile
的名称可以假设相同。我不知道如何处理这个问题。任何形式的帮助都将受到高度赞赏。感谢。
答案 0 :(得分:0)
删除对您的文件系统的任何用户访问权限。使用FK而不是直接操作文件。不要删除旧文件,而是不显示旧文件。
class DocFile(models.Model):
file = models.FileField(upload_to=file_path) # Single path for all doc files
class Document(models.Model):
# Optional name, description fields
approved = models.FK(DocFile)
revisions = models.ManyToManyField(DocFile)
当普通用户上传文件时,将其添加到Document.revisions,如果是唯一的修订版,则将其设置为已批准。
为经理创建权限组,并允许他们在管理员中编辑文档。通过这种方式,他们可以选择与文档关联的哪个DocFiles是批准的文档。无需传输文件,您不会丢失文件版本,并且文件系统对rm -r是安全的。经理也可以下载文件进行审核