2011-08-04 17 views
2

ユーザーがファイルをアップロードすると、他のユーザーがそのファイルをプロジェクトに添付することができます。Django:ファイルへの関連付けを削除しますが、実際にはファイルを削除しません。

class DashFile(models.Model): 
    dash_version = models.ForeignKey(DashVersion) 
    title = models.CharField(max_length=255) 
    file = models.FileField(upload_to=get_fs_upload_path, max_length=255) 
    display_order = models.IntegerField(default=99) 

私は基本的にDashFileをクローンしていますので、すべての値はdash_versionを除いて同じです。

ユーザーがプロジェクトからファイルを削除する場合、ファイルが削除されます。ただし、そのファイルに関連付けを行った他のすべてのユーザーのファイルも削除されます。

これで、ユーザーがプロジェクトからファイルを削除すると、ファイルが実際に削除されないようにするにはどうすればよいですか?

デザインの選択が間違っていることも知っています。私はForeignKeyを使用してはいけませんでしたが、多対多フィールドを使用すべきでした。しかし、私は今どこにいるのですか?

おかげ エリック

答えて

0

それはあなたが使用してDjangoのバージョンに依存します。バージョン1.235よりFileField never deletes files from storage backend on model.delete()。あなたがDjangoの< 1.2.5を使用する場合は

カスタムFileStorage実装できます。

from django.core.files import storage 

class NoDeleteStorage(storage.FileSystemStorage): 
    def delete(self, *a,**kw): 
     pass 

nodelete_storage = NoDeleteStorage() 

class DashFile(models.Model): 
    dash_version = models.ForeignKey(DashVersion) 
    title = models.CharField(max_length=255) 
    file = models.FileField(upload_to=get_fs_upload_path, 
          storage=nodelete_storage, 
          max_length=255) 
    display_order = models.IntegerField(default=99) 
+0

ありがとうございました。 1.3へのアップグレードはそのトリックでした。 –

関連する問題