14

Pictureが付いたモデルがありImageFieldます。のインスタンスを削除する場合、Pictureに設定されているファイルImageFieldは削除されません。

バグですか?どうすればいいですか?

4

2 に答える 2

30

FileFieldsおよびImageFieldsに関連付けられたファイルの削除は、Django1.3で意図的に削除されました。チケット#6456を参照してください。Djangoはトランザクションを広範囲に使用して、リクエストで問題が発生した場合のデータ破損を防ぎます。削除トランザクションがロールバックされた場合、ファイルがファイルシステムから削除された後、存在しないファイルを指すレコードが作成されます。自動削除を要求するすべてのチケットは、まとめて「修正されません」とマークされているため、これは変更されません。

回避策については、この前のStackOverflowの質問を参照してください。

于 2012-07-12T16:47:25.560 に答える
1

仮定?

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

于 2012-07-12T16:52:07.720 に答える