【问题标题】:Use already uploaded image in Django's ImageField在 Django 的 ImageField 中使用已经上传的图片
【发布时间】:2026-01-31 17:20:05
【问题描述】:

ImageField 中是否有设置路径或已上传图片的选项?

我的用例如下:我想在两个不同的内容条目中重新利用相同的图像。我不想上传图片两次或存储同一张图片的两个副本。

【问题讨论】:

标签: django django-models


【解决方案1】:

只需将图像字段从一个模型实例分配给另一个:

original_entry = Entry.objects.get(pk=1)

another_entry = Entry.objects.get(pk=2)
another_entry.image = original_entry.image
another_entry.save()

new_entry = Entry.objects.create(image=original_entry.image)

【讨论】:

    【解决方案2】:

    只需将图像放入它自己的模型中:

    class Image(models.Model):
        image = models.ImageField(...)
    
    class ModelA(models.Model)
         image = models.ForeignKey(Image, null=True, blank=True)
    
    class ModelB(models.Model)
         image = models.ForeignKey(Image, null=True, blank=True)
    

    【讨论】:

    • 谢谢,两个答案都解决了问题,但我只能接受一个。
    • 请注意,接受的答案和我的答案略有不同。接受的答案 assignment dance 必须在每次图像更新时执行。如果图像永远不会改变,那没问题。但是如果您期望图像更改,请添加额外的逻辑以确保一致性。单独的模型适用于一个图像场,因此更易于维护。单独模型的缺点是额外相关图像查找的 db 惩罚。