В Django, как я могу перемещать изображения при изменении динамического пути? - PullRequest
1 голос
/ 12 октября 2009

У меня есть приложение Django с полем изображения (пользовательский тип ThumbnailImageField), которое автоматически генерирует путь к файлу для изображения на основе заголовка, типа и страны элемента, к которому прикреплено изображение (upload_ to = get_ image_path). Вот как это сделать:

def get_image_path(instance, filename):
    dir = 'images'
    subdir = instance.get_type_display()
    sub_subdir = 'other'
    if instance.country:
        sub_subdir = instance.country.name
    name = instance.name
    extension = filename.split('.')[-1]

    return "%s/%s/%s/%s.%s" % (dir, subdir, sub_subdir, name, extension)

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

Итак, волшебный вопрос:

Есть ли в Django какая-то функция сохранения, которую я могу подключить и переопределить, что позволит мне получить исходный объект и предложенные значения и сравнить их, чтобы я знал, где был путь к изображению и куда он должен идти (а затем использовать эту информацию для перемещения / переименования в коде)?

1 Ответ

3 голосов
/ 12 октября 2009

Вы, вероятно, хотите посмотреть на сигналы:

http://docs.djangoproject.com/en/dev/topics/signals/

В частности, сигнал django.db.models.signals.pre_save:

http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#pre_save

...