Skip to content

Commit e981a6d

Browse files
authored
Fix #224 -- delete_orphans independent from blank (#225)
1 parent a99cb52 commit e981a6d

File tree

4 files changed

+33
-5
lines changed

4 files changed

+33
-5
lines changed

stdimage/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ def validate(self, value, model_instance):
284284
MinSizeValidator(self.min_size[0], self.min_size[1])(value)
285285

286286
def save_form_data(self, instance, data):
287-
if self.delete_orphans and self.blank and (data is False or data is not None):
287+
if self.delete_orphans and (data is False or data is not None):
288288
file = getattr(instance, self.name)
289289
if file and file._committed and file != data:
290290
file.delete(save=False)

tests/admin.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from . import models
44

55
admin.site.register(models.AdminDeleteModel)
6+
admin.site.register(models.AdminUpdateModel)
67
admin.site.register(models.ResizeCropModel)
78
admin.site.register(models.ResizeModel)
89
admin.site.register(models.SimpleModel)

tests/models.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,18 @@ class AdminDeleteModel(models.Model):
3030
)
3131

3232

33+
class AdminUpdateModel(models.Model):
34+
"""can be updated through admin, image not optional"""
35+
image = StdImageField(
36+
upload_to=upload_to,
37+
variations={
38+
'thumbnail': (100, 75),
39+
},
40+
blank=False,
41+
delete_orphans=True,
42+
)
43+
44+
3345
class ResizeModel(models.Model):
3446
"""resizes image to maximum size to fit a 640x480 area"""
3547
image = StdImageField(

tests/test_models.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
from PIL import Image
1010

1111
from . import models
12-
from .models import (AdminDeleteModel, CustomRenderVariationsModel, ResizeCropModel,
13-
ResizeModel, SimpleModel, ThumbnailModel,
12+
from .models import (AdminDeleteModel, AdminUpdateModel, CustomRenderVariationsModel,
13+
ResizeCropModel, ResizeModel, SimpleModel, ThumbnailModel,
1414
ThumbnailWithoutDirectoryModel, UtilVariationsModel,)
1515

1616
IMG_DIR = os.path.join(settings.MEDIA_ROOT, 'img')
@@ -198,13 +198,28 @@ def test_pre_save_delete_callback_clear(self, admin_client):
198198
assert not os.path.exists(path)
199199

200200
def test_pre_save_delete_callback_new(self, admin_client):
201-
AdminDeleteModel.objects.create(
201+
obj = AdminDeleteModel.objects.create(
202202
image=self.fixtures['100.gif']
203203
)
204+
path = obj.image.path
205+
assert os.path.exists(path)
204206
admin_client.post('/admin/tests/admindeletemodel/1/change/', {
205207
'image': self.fixtures['600x400.jpg'],
206208
})
207-
assert not os.path.exists(os.path.join(IMG_DIR, 'image.gif'))
209+
assert not os.path.exists(path)
210+
assert os.path.exists(os.path.join(IMG_DIR, '600x400.jpg'))
211+
212+
def test_pre_save_delete_callback_update(self, admin_client):
213+
obj = AdminUpdateModel.objects.create(
214+
image=self.fixtures['100.gif']
215+
)
216+
path = obj.image.path
217+
assert os.path.exists(path)
218+
admin_client.post('/admin/tests/adminupdatemodel/1/change/', {
219+
'image': self.fixtures['600x400.jpg'],
220+
})
221+
assert not os.path.exists(path)
222+
assert os.path.exists(os.path.join(IMG_DIR, '600x400.jpg'))
208223

209224
def test_render_variations_callback(self, db):
210225
obj = UtilVariationsModel.objects.create(image=self.fixtures['100.gif'])

0 commit comments

Comments
 (0)