From 6a6ceb369ce2e5a951b0a95f6cb380d1bb930ae3 Mon Sep 17 00:00:00 2001 From: James Meakin <12661555+jmsmkn@users.noreply.github.com> Date: Mon, 17 Nov 2025 15:50:43 +0100 Subject: [PATCH] Skip operations for objects with no pictures to migrate Closes https://github.com/codingjoe/django-pictures/issues/228 --- pictures/migrations.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pictures/migrations.py b/pictures/migrations.py index 9fe6eba..fe0ebff 100644 --- a/pictures/migrations.py +++ b/pictures/migrations.py @@ -56,7 +56,9 @@ def update_pictures(self, from_field: PictureField, to_model: type[models.Model] new_field_file.update_all(old_field_file) def from_picture_field(self, from_model: type[models.Model]): - for obj in from_model._default_manager.all().iterator(): + for obj in from_model._default_manager.exclude( + Q(**{self.name: ""}) | Q(**{self.name: None}) + ).iterator(): field_file = getattr(obj, self.name) field_file.delete_all() @@ -66,9 +68,13 @@ def to_picture_field( from_field = from_model._meta.get_field(self.name) if hasattr(from_field.attr_class, "delete_variations"): # remove obsolete django-stdimage variations - for obj in from_model._default_manager.all().iterator(): + for obj in from_model._default_manager.exclude( + Q(**{self.name: ""}) | Q(**{self.name: None}) + ).iterator(): field_file = getattr(obj, self.name) field_file.delete_variations() - for obj in to_model._default_manager.all().iterator(): + for obj in to_model._default_manager.exclude( + Q(**{self.name: ""}) | Q(**{self.name: None}) + ).iterator(): field_file = getattr(obj, self.name) field_file.save_all()