# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.core.files import File import os def migrate_simple_image_to_m2m(base_model, image_model, rel_model, verbose=False): missing, moved = 0, 0 for item in base_model.objects.all(): if not item.image: continue image_instance = image_model.objects.create() try: image_instance.image.save( os.path.basename(item.image.path), File(open(item.image.path)) ) image_instance.thumbnail.save( os.path.basename(item.thumbnail.path), File(open(item.thumbnail.path)) ) except IOError: # image not on hard-drive item.image = None item.thumbnail = None item.save() image_instance.delete() missing += 1 continue image_instance.save() rel_model.objects.create(item=item, image=image_instance, is_main=True) # clean item.image = None item.thumbnail = None item.save() moved += 1 if verbose: print("") print(base_model) print("{} missing".format(missing)) print("{} moved".format(moved))