2012-07-12 6 views
11

ImageFieldPictureモデルがあります。 Pictureのインスタンスを削除すると、ImageFieldに設定されたファイルは削除されません。ImageFieldフィールドのオブジェクトが削除されたときに画像ファイルが削除されない

バグですか?どうしたらいいですか? FileField sおよびImageField秒に関連付けられているファイルの

+0

あなたのビューはどのようなものが見えますか? – rh0dium

+0

私は見ることがありません。 – jul

+0

[データベース/モデルからオブジェクトを削除するとDjango Adminにファイルを削除する方法は?](http://stackoverflow.com/questions/5372934/how-do-i-get-django-admin -to-delete-files-i-remove-object-from-datab) –

答えて

25

削除が意図的にジャンゴ1.3で削除ました。 ticket #6456を参照してください。 Djangoは、何か問題が発生した場合にデータの破損を防ぐために、トランザクションを広範囲に使用します。削除トランザクションがロールバックされると、ファイルシステムからファイルが削除された後に、存在しないファイルを指すレコードが作成されます。返却する自動削除を求めるすべてのチケットは、「修正されません」とまとめてマークされているため、変更されることはありません。

回避方法は、this previous StackOverflow questionを参照してください。

0

前提条件はありますか?

class Picture(models.Model): 
    image = ImageField(blank=True, null=True, upload_to="pics") 

    def delete(self, *args, **kwargs): 
     self.image.delete() 
     super(Picture, self).delete(*args, **kwargs) 

そして、これを手動で作成および削除することができます。..

image = "./image.jpg" 
picture = Picture.objects.create(image=File(open(image, "r")) 
picture.save() 

そして、それを削除しますか?

picture.delete()

HTH

+5

この回答は既にかなり古いですが、最初のコードブロックの5行目は 'self.image.delete()' – Tim

+2

そして、 'Picture.objects.filter(...)。delete()'などのためにはうまくいかないシグナルを使うのが良いでしょう。 – Sassan

関連する問題