在Django中,路径变更时如何移动图片?

1 投票
1 回答
552 浏览
提问于 2025-04-15 15:01

我有一个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

你可能想了解一下信号的概念:

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

撰写回答