diff options
| author | Jacob Kaplan-Moss <jacob@jacobian.org> | 2008-08-27 21:18:45 +0000 |
|---|---|---|
| committer | Jacob Kaplan-Moss <jacob@jacobian.org> | 2008-08-27 21:18:45 +0000 |
| commit | 8943a857a7bcf8aae9edc0eb09719e36f7b9e78c (patch) | |
| tree | c0874ee9af94f35fd04cde09fa708055384bedd7 | |
| parent | c33aeaa082b2f821db0b87afbd01f5e0144b9aa4 (diff) | |
Fixed #8175: don't open files we're about to close. This was a pesky bug to track down; thanks to charmless for tracking it down.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8637 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | django/db/models/fields/files.py | 7 | ||||
| -rw-r--r-- | tests/regressiontests/file_storage/models.py | 6 |
2 files changed, 12 insertions, 1 deletions
diff --git a/django/db/models/fields/files.py b/django/db/models/fields/files.py index f83f0cf575..59bd35e27f 100644 --- a/django/db/models/fields/files.py +++ b/django/db/models/fields/files.py @@ -78,7 +78,12 @@ class FieldFile(File): save.alters_data = True def delete(self, save=True): - self.close() + # Only close the file if it's already open, which we know by the + # presence of self._file + if hasattr(self, '_file'): + self.close() + del self._file + self.storage.delete(self.name) self._name = None diff --git a/tests/regressiontests/file_storage/models.py b/tests/regressiontests/file_storage/models.py index df99045352..c0557bcab4 100644 --- a/tests/regressiontests/file_storage/models.py +++ b/tests/regressiontests/file_storage/models.py @@ -40,5 +40,11 @@ if Image: >>> p.mug_width 16 +# Bug #8175: correctly delete files that have been removed off the file system. +>>> import os +>>> p2 = Person(name="Fred") +>>> p2.mugshot.save("shot", ContentFile(image_data)) +>>> os.remove(p2.mugshot.path) +>>> p2.delete() """}
\ No newline at end of file |
