【问题标题】:Django prevent file duplicates in viewDjango在视图中防止文件重复
【发布时间】:2016-07-07 22:23:04
【问题描述】:

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

在模型中执行此操作:

  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 中执行此操作。

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

如果不覆盖FileStorage,如何防止保存重复并仍然伪造messages

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    由于您已经有了满足您的工作保存方法,我建议在其中引发异常,然后在您的视图中处理它:

    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)
    

    然后在你看来,除了块中的闪存消息。

    【讨论】:

      猜你喜欢
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多