[Django] FileFieldのファイルを削除
2013年1月5日
Django-1.4.3のFileFieldを使った場合に、
リンク先のファイルを削除する方法とその存否判定についてです
(FileFieldマニュアル: 日本語 / 英語)
リンク先のファイルを削除する方法とその存否判定についてです
(FileFieldマニュアル: 日本語 / 英語)
FileFieldに格納した値は、FieldFile(ややこしい)にマップされている
some_model_obj = SomeModel.objects.get(id=1)
print type(some_model_obj.some_file_field)
# -> "<class 'django.db.models.fields.files.FieldFile'>"
削除はdeleteを手動で呼び出して行う
# この時点でファイルが削除
some_model_obj.some_file_field.delete()
ファイルの存否判定はFieldFileオブジェクトをboolへキャスト
(コチラを参考にした)
print bool(some_model_obj.some_file_field) # -> True
some_model_obj.some_file_field.delete()
print bool(some_model_obj.some_file_field) # -> False
モデルオブジェクトを削除した際は同期しない、
マニュアルには「コマンド作って同期したら?」と書いてある
Note that when a model is deleted, related files are not deleted. If you need to cleanup orphaned files, you’ll need to handle it yourself (for instance, with a custom management command that can be run manually or scheduled to run periodically via e.g. cron).
個人的には、安易にタスクを増やすのは好きじゃないんですけども