Django防止视图中的文件重复

时间:2016-07-07 22:23:04

标签: django django-models django-forms django-views

我需要防止重复文件保存。

在模型中执行此操作:

  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)

我可以找到解决方案。但是当重复发生时我需要发送messagesmessages需要request - 所以我需要在view中执行此操作。

但是在视图中调用此示例,会创建具有不同名称的文件,这是默认行为。

如何阻止保存重复内容并在不覆盖messages的情况下仍然伪造FileStorage

或者任何其他建议都很棒!

感谢。

1 个答案:

答案 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消息。