From 8943a857a7bcf8aae9edc0eb09719e36f7b9e78c Mon Sep 17 00:00:00 2001
From: Jacob Kaplan-Moss <jacob@jacobian.org>
Date: Wed, 27 Aug 2008 21:18:45 +0000
Subject: [PATCH] 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
---
 django/db/models/fields/files.py             | 7 ++++++-
 tests/regressiontests/file_storage/models.py | 6 ++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

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