Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #6302 for ImageFields.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@7025 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 755278253ee792fc8a7589081261c6f0a66e1423 1 parent 12efef0
@jacobian jacobian authored
View
2  django/newforms/fields.py
@@ -466,6 +466,8 @@ def clean(self, data, initial=None):
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:
View
88 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 @@ def __unicode__(self):
... 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 @@ def __unicode__(self):
>>> 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 @@ def __unicode__(self):
>>> 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 @@ def __unicode__(self):
>>> 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 @@ def __unicode__(self):
>>> 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 @@ def __unicode__(self):
>>> 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()
+
"""}
View
BIN  tests/modeltests/model_forms/test.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 7552782

Please sign in to comment.
Something went wrong with that request. Please try again.