diff options
| author | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2008-07-19 18:35:11 +0000 |
|---|---|---|
| committer | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2008-07-19 18:35:11 +0000 |
| commit | a1037869716796a1075a964112aa380d86ed485f (patch) | |
| tree | 786b63d8a20b4f042acd6dfdba9d573d26e3c76e | |
| parent | c09351aec63f004f89befa4752b386f2a2a3a63c (diff) | |
Fixed #5619 -- Return the same path in get_FOO_filename() before and after a
model is saved (i.e. make sure the upload prefix is prepended in both cases).
Patch from wreese@gmail.com. Tests from Leah Culver.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@7986 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | django/db/models/base.py | 6 | ||||
| -rw-r--r-- | tests/modeltests/model_forms/models.py | 26 |
2 files changed, 26 insertions, 6 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py index 080e0af588..6bd456763f 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -459,13 +459,13 @@ class Model(object): def _get_FIELD_filename(self, field): if getattr(self, field.attname): # Value is not blank. - return os.path.normpath(os.path.join(settings.MEDIA_ROOT, getattr(self, field.attname))) + return os.path.normpath(os.path.join(settings.MEDIA_ROOT, field.get_filename(getattr(self, field.attname)))) return '' def _get_FIELD_url(self, field): if getattr(self, field.attname): # Value is not blank. import urlparse - return urlparse.urljoin(settings.MEDIA_URL, getattr(self, field.attname)).replace('\\', '/') + return urlparse.urljoin(settings.MEDIA_URL, field.get_filename(getattr(self, field.attname))).replace('\\', '/') return '' def _get_FIELD_size(self, field): @@ -494,7 +494,7 @@ class Model(object): elif isinstance(raw_field, basestring): import warnings warnings.warn( - message = "Representing uploaded files as dictionaries is deprecated. Use django.core.files.uploadedfile.SimpleUploadedFile instead.", + message = "Representing uploaded files as strings is deprecated. Use django.core.files.uploadedfile.SimpleUploadedFile instead.", category = DeprecationWarning, stacklevel = 2 ) diff --git a/tests/modeltests/model_forms/models.py b/tests/modeltests/model_forms/models.py index cc9efd0f94..3929774012 100644 --- a/tests/modeltests/model_forms/models.py +++ b/tests/modeltests/model_forms/models.py @@ -12,6 +12,8 @@ import tempfile from django.db import models +TEMP_DIR = tempfile.gettempdir() + ARTICLE_STATUS = ( (1, 'Draft'), (2, 'Pending'), @@ -60,7 +62,7 @@ class PhoneNumber(models.Model): class TextFile(models.Model): description = models.CharField(max_length=20) - file = models.FileField(upload_to=tempfile.gettempdir()) + file = models.FileField(upload_to=TEMP_DIR) def __unicode__(self): return self.description @@ -71,9 +73,9 @@ class ImageFile(models.Model): # If PIL is available, try testing PIL. # Otherwise, it's equivalent to TextFile above. import Image - image = models.ImageField(upload_to=tempfile.gettempdir()) + image = models.ImageField(upload_to=TEMP_DIR) except ImportError: - image = models.FileField(upload_to=tempfile.gettempdir()) + image = models.FileField(upload_to=TEMP_DIR) def __unicode__(self): return self.description @@ -784,6 +786,24 @@ u'Assistance' # 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 Meta: ... model = TextFile |
