Skip to content

from_picture_field and to_picture_field iterate over all objects #228

@jmsmkn

Description

@jmsmkn

In

def from_picture_field(self, from_model: type[models.Model]):
for obj in from_model._default_manager.all().iterator():
field_file = getattr(obj, self.name)
field_file.delete_all()
def to_picture_field(
self, from_model: type[models.Model], to_model: type[models.Model]
):
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():
field_file = getattr(obj, self.name)
field_file.delete_variations()
for obj in to_model._default_manager.all().iterator():
field_file = getattr(obj, self.name)
field_file.save_all()

all objects are iterated over. Similar to #120 empty objects shouldn't be considered. Suggestion:

    def from_picture_field(self, from_model: type[models.Model]):
        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()

    def to_picture_field(
        self, from_model: type[models.Model], to_model: type[models.Model]
    ):
        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.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.exclude(
            Q(**{self.name: ""}) | Q(**{self.name: None})
        ).iterator():
            field_file = getattr(obj, self.name)
            field_file.save_all()

This results in a considerable speedup with many objects with optional picture fields when migrating from/to Django Pictures.

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions