我需要防止重复文件保存。
在模型中执行此操作:
def save(self, *args, **kwargs):
f = self.file
digest = Document.gen_digest(f)
qs = Document.objects.filter(hash=digest).first()
if qs is not None:
self.file = qs.file
super(Document, self).save(*args, **kwargs)
我可以找到解决方案。但是当重复发生时我需要发送messages
。 messages
需要request
- 所以我需要在view
中执行此操作。
但是在视图中调用此示例,会创建具有不同名称的文件,这是默认行为。
如何阻止保存重复内容并在不覆盖messages
的情况下仍然伪造FileStorage
?
或者任何其他建议都很棒!
感谢。
答案 0 :(得分:2)
由于您已经有了满足您的工作保存方法,我建议在其中引发异常,然后在您的视图中处理它:
def save(self, *args, **kwargs):
f = self.file
digest = Document.gen_digest(f)
qs = Document.objects.filter(hash=digest)
if not qs.exists():
self.file = qs.file
else:
# May be some custom DuplicateFileError
raise FileExistsError('Duplicate!!!')
super(Document, self).save(*args, **kwargs)
然后在你看来除了阻止之外的flash消息。