Skip to content

Commit 3819e61

Browse files
authored
Merge pull request #419 from vstoykov/fix/368-processedimagefield-with-spec
Fixed #368 use specs directly in ProcessedImageField
2 parents 845eeab + 2b04099 commit 3819e61

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

imagekit/models/fields/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,18 @@ class ProcessedImageField(models.ImageField, SpecHostField):
9393

9494
def __init__(self, processors=None, format=None, options=None,
9595
verbose_name=None, name=None, width_field=None, height_field=None,
96-
autoconvert=True, spec=None, spec_id=None, **kwargs):
96+
autoconvert=None, spec=None, spec_id=None, **kwargs):
9797
"""
9898
The ProcessedImageField constructor accepts all of the arguments that
9999
the :class:`django.db.models.ImageField` constructor accepts, as well
100100
as the ``processors``, ``format``, and ``options`` arguments of
101101
:class:`imagekit.models.ImageSpecField`.
102102
103103
"""
104+
# if spec is not provided then autoconvert will be True by default
105+
if spec is None and autoconvert is None:
106+
autoconvert = True
107+
104108
SpecHost.__init__(self, processors=processors, format=format,
105109
options=options, autoconvert=autoconvert, spec=spec,
106110
spec_id=spec_id)

tests/models.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
from django.db import models
22

3+
from imagekit import ImageSpec
34
from imagekit.models import ProcessedImageField
45
from imagekit.models import ImageSpecField
56
from imagekit.processors import Adjust, ResizeToFill, SmartCrop
67

78

9+
class Thumbnail(ImageSpec):
10+
processors = [ResizeToFill(100, 60)]
11+
format = 'JPEG'
12+
options = {'quality': 60}
13+
14+
815
class ImageModel(models.Model):
916
image = models.ImageField(upload_to='b')
1017

@@ -27,6 +34,10 @@ class ProcessedImageFieldModel(models.Model):
2734
options={'quality': 90}, upload_to='p')
2835

2936

37+
class ProcessedImageFieldWithSpecModel(models.Model):
38+
processed = ProcessedImageField(spec=Thumbnail, upload_to='p')
39+
40+
3041
class CountingCacheFileStrategy(object):
3142
def __init__(self):
3243
self.on_existence_required_count = 0

tests/test_fields.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
from imagekit.processors import SmartCrop
66
from nose.tools import eq_
77
from . import imagegenerators # noqa
8-
from .models import ProcessedImageFieldModel, ImageModel
8+
from .models import (ProcessedImageFieldModel,
9+
ProcessedImageFieldWithSpecModel,
10+
ImageModel)
911
from .utils import get_image_file
1012

1113

@@ -19,6 +21,16 @@ def test_model_processedimagefield():
1921
eq_(instance.processed.height, 50)
2022

2123

24+
def test_model_processedimagefield_with_spec():
25+
instance = ProcessedImageFieldWithSpecModel()
26+
file = File(get_image_file())
27+
instance.processed.save('whatever.jpeg', file)
28+
instance.save()
29+
30+
eq_(instance.processed.width, 100)
31+
eq_(instance.processed.height, 60)
32+
33+
2234
def test_form_processedimagefield():
2335
class TestForm(forms.ModelForm):
2436
image = ikforms.ProcessedImageField(spec_id='tests:testform_image',

0 commit comments

Comments
 (0)