2016-07-07 5 views
2

ファイルの重複を避ける必要があります。Djangoはファイルの重複を防ぐために

モデルでこれを行う:

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

その他のアドバイスは素晴らしいことでしょう。

ありがとうございました。あなたはすでにあなたを満足させる方法保存働いてきたように

答えて

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) 

そして、あなたのビューフラッシュメッセージにブロックを除いに。

関連する問題