6

FileFieldを持つモデルを持つdjangoでアプリケーションを実装しています:

class Slideshow(models.Model):
    name = models.CharField(max_length=30,unique=True)
    thumbnail = models.FileField(max_length=1000,upload_to="images/app/slideshows/thumbnails")

djangoがモデルを管理する管理バックエンドがあります。admin.pyファイルを追加したところ、djangoがすべてを管理してくれます

from django.contrib import admin

from apps.gallery.models import Slideshow

admin.site.register(Slideshow)

バックエンドでは、スライドショーを追加、削除、更新することができます。ただし、スライドショーを更新してその属性サムネイル[FileField]を変更しようとすると、djangoは古いファイルを削除しません。その結果、いくつかの更新の後、サーバーは役に立たない多くのファイルでいっぱいになります。私の質問は、更新後にdjangoにこれらのファイルを自動的に削除させるにはどうすればよいですか?

よろしくお願いします

4

2 に答える 2

2

私はこの問題についてよく考えました、そして最終的に私は私にとってうまくいくよりも解決策を見つけました。プロジェクト内のすべてのモデルを検索し、pre_saveおよびpost_deleteシグナルをそれらに接続できます。

最後に、この問題を解決するアプリを作成しました-django -cleanup

于 2012-08-17T12:27:03.297 に答える
1

Djangoはこれを意図的に行っていると確信しています。たとえば、他のモデルがそのファイルを使用しているかどうかを知ることはできません。また、ファイルが残ることを期待して、djangoがファイルを削除したことを発見した場合も、本当に驚かれることでしょう。

ただし、ファイルフィールドを変更するとすぐに、古いファイル名が失われるという問題もあります。

その問題についてのオープンチケットがあります:http://code.djangoproject.com/ticket/11663

http://code.djangoproject.com/ticket/2983にパッチがあり__set__、以前のファイル名を保存するためにオーバーライドする方法を示しています。次に、モデルの__save__メソッドは前のファイル名にアクセスしてファイルを削除できます。

于 2010-01-07T22:15:43.370 に答える