# -*- 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)) def migrate_images(apps, base_model, rel_model): IshtarImage = apps.get_model('ishtar_common', 'IshtarImage') Document = apps.get_model('ishtar_common', 'Document') for image_rel in rel_model.objects.order_by('is_main').all(): image = IshtarImage.objects.get(pk=image_rel.image.pk) doc = Document.objects.create(image=image.image, thumbnail=image.thumbnail) item = base_model.objects.get(pk=image_rel.item.pk) item.documents.add(doc) def migrate_sources(apps, base_model, source_model, item_attr): Document = apps.get_model('ishtar_common', 'Document') for source in source_model.objects.all(): doc = Document.objects.create() for attr in ['title', 'index', 'external_id', 'reference', 'internal_reference', 'source_type', 'support_type', 'format_type', 'scale', 'associated_url', 'receipt_date', 'creation_date', 'receipt_date_in_documentation', 'item_number', 'description', 'comment', 'additional_information', 'duplicate']: setattr(doc, attr, getattr(source, attr)) doc.save() for author in source.authors.all(): doc.authors.add(author) item = base_model.objects.get(pk=getattr(source, item_attr).pk) item.documents.add(doc)