summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2008-01-18 15:53:19 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2008-01-18 15:53:19 +0000
commit755278253ee792fc8a7589081261c6f0a66e1423 (patch)
treeede3caf8d1942d472e601d14bf2e1458affbf6d0
parent12efef06357544ee81a3731899f528e9b867792a (diff)
Fixed #6302 for ImageFields.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@7025 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/newforms/fields.py2
-rw-r--r--tests/modeltests/model_forms/models.py88
-rw-r--r--tests/modeltests/model_forms/test.pngbin0 -> 482 bytes
3 files changed, 83 insertions, 7 deletions
diff --git a/django/newforms/fields.py b/django/newforms/fields.py
index 0761b8f2af..bc3e543037 100644
--- a/django/newforms/fields.py
+++ b/django/newforms/fields.py
@@ -466,6 +466,8 @@ class ImageField(FileField):
f = super(ImageField, self).clean(data, initial)
if f is None:
return None
+ elif not data and initial:
+ return initial
from PIL import Image
from cStringIO import StringIO
try:
diff --git a/tests/modeltests/model_forms/models.py b/tests/modeltests/model_forms/models.py
index ff3f20e197..f1fed8f1e1 100644
--- a/tests/modeltests/model_forms/models.py
+++ b/tests/modeltests/model_forms/models.py
@@ -64,6 +64,13 @@ class TextFile(models.Model):
def __unicode__(self):
return self.description
+
+class ImageFile(models.Model):
+ description = models.CharField(max_length=20)
+ image = models.FileField(upload_to=tempfile.gettempdir())
+
+ def __unicode__(self):
+ return self.description
__test__ = {'API_TESTS': """
>>> from django import newforms as forms
@@ -718,7 +725,7 @@ True
... class Meta:
... model = TextFile
-Test conditions when files is either not given or empty.
+# Test conditions when files is either not given or empty.
>>> f = TextFileForm(data={'description': u'Assistance'})
>>> f.is_valid()
@@ -727,7 +734,7 @@ False
>>> f.is_valid()
False
-Upload a file and ensure it all works as expected.
+# Upload a file and ensure it all works as expected.
>>> f = TextFileForm(data={'description': u'Assistance'}, files={'file': {'filename': 'test1.txt', 'content': 'hello world'}})
>>> f.is_valid()
@@ -738,8 +745,8 @@ True
>>> instance.file
u'.../test1.txt'
-Edit an instance that already has the file defined in the model. This will not
-save the file again, but leave it exactly as it is.
+# Edit an instance that already has the file defined in the model. This will not
+# save the file again, but leave it exactly as it is.
>>> f = TextFileForm(data={'description': u'Assistance'}, instance=instance)
>>> f.is_valid()
@@ -750,11 +757,11 @@ u'.../test1.txt'
>>> instance.file
u'.../test1.txt'
-Delete the current file since this is not done by Django.
+# Delete the current file since this is not done by Django.
>>> os.unlink(instance.get_file_filename())
-Override the file by uploading a new one.
+# Override the file by uploading a new one.
>>> f = TextFileForm(data={'description': u'Assistance'}, files={'file': {'filename': 'test2.txt', 'content': 'hello world'}}, instance=instance)
>>> f.is_valid()
@@ -765,7 +772,7 @@ u'.../test2.txt'
>>> instance.delete()
-Test the non-required FileField
+# Test the non-required FileField
>>> f = TextFileForm(data={'description': u'Assistance'})
>>> f.fields['file'].required = False
@@ -782,4 +789,71 @@ True
>>> instance.file
u'.../test3.txt'
>>> instance.delete()
+
+# ImageField ###################################################################
+
+# ImageField and FileField are nearly identical, but they differ slighty when
+# it comes to validation. This specifically tests that #6302 is fixed for
+# both file fields and image fields.
+
+>>> class ImageFileForm(ModelForm):
+... class Meta:
+... model = ImageFile
+
+>>> image_data = open(os.path.join(os.path.dirname(__file__), "test.png")).read()
+
+>>> f = ImageFileForm(data={'description': u'An image'}, files={'image': {'filename': 'test.png', 'content': image_data}})
+>>> f.is_valid()
+True
+>>> type(f.cleaned_data['image'])
+<class 'django.newforms.fields.UploadedFile'>
+>>> instance = f.save()
+>>> instance.image
+u'.../test.png'
+
+# Edit an instance that already has the image defined in the model. This will not
+# save the image again, but leave it exactly as it is.
+
+>>> f = ImageFileForm(data={'description': u'Look, it changed'}, instance=instance)
+>>> f.is_valid()
+True
+>>> f.cleaned_data['image']
+u'.../test.png'
+>>> instance = f.save()
+>>> instance.image
+u'.../test.png'
+
+# Delete the current image since this is not done by Django.
+
+>>> os.unlink(instance.get_image_filename())
+
+# Override the file by uploading a new one.
+
+>>> f = ImageFileForm(data={'description': u'Changed it'}, files={'image': {'filename': 'test2.png', 'content': image_data}}, instance=instance)
+>>> f.is_valid()
+True
+>>> instance = f.save()
+>>> instance.image
+u'.../test2.png'
+
+>>> instance.delete()
+
+# Test the non-required ImageField
+
+>>> f = ImageFileForm(data={'description': u'Test'})
+>>> f.fields['image'].required = False
+>>> f.is_valid()
+True
+>>> instance = f.save()
+>>> instance.image
+''
+
+>>> f = ImageFileForm(data={'description': u'And a final one'}, files={'image': {'filename': 'test3.png', 'content': image_data}}, instance=instance)
+>>> f.is_valid()
+True
+>>> instance = f.save()
+>>> instance.image
+u'.../test3.png'
+>>> instance.delete()
+
"""}
diff --git a/tests/modeltests/model_forms/test.png b/tests/modeltests/model_forms/test.png
new file mode 100644
index 0000000000..4f17cd075d
--- /dev/null
+++ b/tests/modeltests/model_forms/test.png
Binary files differ