Skip to content

Commit

Permalink
Fix #224 -- delete_orphans independent from blank (#225)
Browse files Browse the repository at this point in the history
  • Loading branch information
vchrisb committed Mar 26, 2021
1 parent a99cb52 commit e981a6d
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 5 deletions.
2 changes: 1 addition & 1 deletion stdimage/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ def validate(self, value, model_instance):
MinSizeValidator(self.min_size[0], self.min_size[1])(value)

def save_form_data(self, instance, data):
if self.delete_orphans and self.blank and (data is False or data is not None):
if self.delete_orphans and (data is False or data is not None):
file = getattr(instance, self.name)
if file and file._committed and file != data:
file.delete(save=False)
Expand Down
1 change: 1 addition & 0 deletions tests/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from . import models

admin.site.register(models.AdminDeleteModel)
admin.site.register(models.AdminUpdateModel)
admin.site.register(models.ResizeCropModel)
admin.site.register(models.ResizeModel)
admin.site.register(models.SimpleModel)
Expand Down
12 changes: 12 additions & 0 deletions tests/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,18 @@ class AdminDeleteModel(models.Model):
)


class AdminUpdateModel(models.Model):
"""can be updated through admin, image not optional"""
image = StdImageField(
upload_to=upload_to,
variations={
'thumbnail': (100, 75),
},
blank=False,
delete_orphans=True,
)


class ResizeModel(models.Model):
"""resizes image to maximum size to fit a 640x480 area"""
image = StdImageField(
Expand Down
23 changes: 19 additions & 4 deletions tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
from PIL import Image

from . import models
from .models import (AdminDeleteModel, CustomRenderVariationsModel, ResizeCropModel,
ResizeModel, SimpleModel, ThumbnailModel,
from .models import (AdminDeleteModel, AdminUpdateModel, CustomRenderVariationsModel,
ResizeCropModel, ResizeModel, SimpleModel, ThumbnailModel,
ThumbnailWithoutDirectoryModel, UtilVariationsModel,)

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

def test_pre_save_delete_callback_new(self, admin_client):
AdminDeleteModel.objects.create(
obj = AdminDeleteModel.objects.create(
image=self.fixtures['100.gif']
)
path = obj.image.path
assert os.path.exists(path)
admin_client.post('/admin/tests/admindeletemodel/1/change/', {
'image': self.fixtures['600x400.jpg'],
})
assert not os.path.exists(os.path.join(IMG_DIR, 'image.gif'))
assert not os.path.exists(path)
assert os.path.exists(os.path.join(IMG_DIR, '600x400.jpg'))

def test_pre_save_delete_callback_update(self, admin_client):
obj = AdminUpdateModel.objects.create(
image=self.fixtures['100.gif']
)
path = obj.image.path
assert os.path.exists(path)
admin_client.post('/admin/tests/adminupdatemodel/1/change/', {
'image': self.fixtures['600x400.jpg'],
})
assert not os.path.exists(path)
assert os.path.exists(os.path.join(IMG_DIR, '600x400.jpg'))

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

0 comments on commit e981a6d

Please sign in to comment.