Reverted [7986].
It turns out that we need to treat filename creation/display (in particular, the upload_to path) differently depending upon whether the value is out of the database or provided by other code and there's no reliable way to determine that at the moment (although some later proposed changes might alter that). So calling get_FIELD_filename on an unsaved model with a changed file attribute will not necessarily return the same result as after the save(). Refs #5619. Fixed #7843. git-svn-id: http://code.djangoproject.com/svn/django/trunk@7998 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
a4619944dc
commit
5141b67a19
|
@ -459,13 +459,13 @@ class Model(object):
|
||||||
|
|
||||||
def _get_FIELD_filename(self, field):
|
def _get_FIELD_filename(self, field):
|
||||||
if getattr(self, field.attname): # Value is not blank.
|
if getattr(self, field.attname): # Value is not blank.
|
||||||
return os.path.normpath(os.path.join(settings.MEDIA_ROOT, field.get_filename(getattr(self, field.attname))))
|
return os.path.normpath(os.path.join(settings.MEDIA_ROOT, getattr(self, field.attname)))
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def _get_FIELD_url(self, field):
|
def _get_FIELD_url(self, field):
|
||||||
if getattr(self, field.attname): # Value is not blank.
|
if getattr(self, field.attname): # Value is not blank.
|
||||||
import urlparse
|
import urlparse
|
||||||
return urlparse.urljoin(settings.MEDIA_URL, field.get_filename(getattr(self, field.attname))).replace('\\', '/')
|
return urlparse.urljoin(settings.MEDIA_URL, getattr(self, field.attname)).replace('\\', '/')
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def _get_FIELD_size(self, field):
|
def _get_FIELD_size(self, field):
|
||||||
|
|
|
@ -12,8 +12,6 @@ import tempfile
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
TEMP_DIR = tempfile.gettempdir()
|
|
||||||
|
|
||||||
ARTICLE_STATUS = (
|
ARTICLE_STATUS = (
|
||||||
(1, 'Draft'),
|
(1, 'Draft'),
|
||||||
(2, 'Pending'),
|
(2, 'Pending'),
|
||||||
|
@ -62,7 +60,7 @@ class PhoneNumber(models.Model):
|
||||||
|
|
||||||
class TextFile(models.Model):
|
class TextFile(models.Model):
|
||||||
description = models.CharField(max_length=20)
|
description = models.CharField(max_length=20)
|
||||||
file = models.FileField(upload_to=TEMP_DIR)
|
file = models.FileField(upload_to=tempfile.gettempdir())
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.description
|
return self.description
|
||||||
|
@ -73,9 +71,9 @@ class ImageFile(models.Model):
|
||||||
# If PIL is available, try testing PIL.
|
# If PIL is available, try testing PIL.
|
||||||
# Otherwise, it's equivalent to TextFile above.
|
# Otherwise, it's equivalent to TextFile above.
|
||||||
import Image
|
import Image
|
||||||
image = models.ImageField(upload_to=TEMP_DIR)
|
image = models.ImageField(upload_to=tempfile.gettempdir())
|
||||||
except ImportError:
|
except ImportError:
|
||||||
image = models.FileField(upload_to=TEMP_DIR)
|
image = models.FileField(upload_to=tempfile.gettempdir())
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.description
|
return self.description
|
||||||
|
@ -786,24 +784,6 @@ u'Assistance'
|
||||||
|
|
||||||
# FileField ###################################################################
|
# FileField ###################################################################
|
||||||
|
|
||||||
# File instance methods. Tests fix for #5619.
|
|
||||||
|
|
||||||
>>> instance = TextFile(description='nothing', file='name')
|
|
||||||
>>> expected = '%s/name' % TEMP_DIR
|
|
||||||
>>> instance.get_file_filename() == expected
|
|
||||||
True
|
|
||||||
>>> instance.get_file_url() == expected
|
|
||||||
True
|
|
||||||
>>> instance.save_file_file(instance.file, SimpleUploadedFile(instance.file, 'some text'))
|
|
||||||
>>> instance.get_file_filename() == expected
|
|
||||||
True
|
|
||||||
>>> instance.get_file_url() == expected
|
|
||||||
True
|
|
||||||
|
|
||||||
>>> os.unlink(instance.get_file_filename())
|
|
||||||
|
|
||||||
# File forms.
|
|
||||||
|
|
||||||
>>> class TextFileForm(ModelForm):
|
>>> class TextFileForm(ModelForm):
|
||||||
... class Meta:
|
... class Meta:
|
||||||
... model = TextFile
|
... model = TextFile
|
||||||
|
|
Loading…
Reference in New Issue