在 Django 中检索 imageField 的 url 的最佳方法

Best way to retrieve the url of a imageField in django

我使用的是以下型号:

class Product(models.Model):
    # some other stuff
    pictures = models.ManyToManyField(Image)

class Image(models.Model):
    # MEDIA_ROOT = /full/path/to/my/media/folder/
    image = models.ImageField(upload_to=settings.MEDIA_ROOT, default=DEFAULT_PROFILE_PICTURE)

然后在一个视图中我想检索图像所以我 运行 下面的代码:

for pic in product.pictures.all():
        pictures += [pic.image.url.replace(settings.PROJECT_ROOT, url)]

这里的问题是 pic.image.url 给我系统路径,而我期待的是相对路径(类似于 /media/mypicture.jpg)所以为了解决这个问题我使用了 replace功能,但在我看来它应该是更好的方法。

如何构建模型或访问图像以避免使用 replace 方法?

提前致谢

您不应将 MEDIA_ROOT 用作 upload_to 值。如果你想上传到 MEDIA_ROOT 而没有任何子目录,那么只需使用空字符串 '':

image = models.ImageField(upload_to='')