Сохранять URL-адрес в django ImageField при копировании в новый экземпляр модели

Я выполняю миграцию данных, перемещая изображения из одной модели в свою собственную модель.

class OldCrappyModel(models.Model):
    ...
    original_image = models.ImageField(upload_to=upload_original_image, null=True, blank=True)
    my_events_image = models.ImageField(upload_to=upload_my_promotions_image, null=True, blank=True)
    ... 

class MyImage(models.Model):
    original_image = models.ImageField(upload_to=upload_original_image, null=True, blank=True)
    my_events_image = models.ImageField(upload_to=upload_my_promotions_image, null=True, blank=True)
    ...

Методы upload_to просто возвращают уникальное имя файла.

Когда я иду их переносить (в южной миграции данных):

i = MyImage(
    my_events_image = old.my_events_image,
    original_image = old.original_image,
)
i.save()

Проблема в том, что у нас есть некоторые изображения, которые находятся не в том же месте, что и новые. Когда происходит копирование, он переводит URL-адрес из старого ImageField в URL-адрес, который будет работать для нового. Например:

old.url выходит к path/to/something/awesome.jpg

i.url становится new/media/root/awesome.jpg

Как я могу сохранить ImageField, чтобы с ним ничего не происходило при его сохранении? Я хотел бы избежать необходимости делать новые копии всех файлов, если это возможно.


person raphael    schedule 08.08.2014    source источник


Ответы (1)


Отключите upload_to на время миграции. Установите upload_to вручную при копировании экземпляров.

После переноса включите его обратно.

person Community    schedule 08.08.2014