在视图中,如何返回Imagefield查询集的MEDIA_URL?

时间:2016-10-17 20:15:20

标签: django python-3.x

假设我有以下型号:

class ProductImage(models.Model):
    image = models.ImageField('Product image', null=True,blank=True)
    view = models.CharField(max_length=2, choices=VIEW_TYPES, default='FR', null=True,blank=True)
    description = models.CharField(max_length=125, blank=True, null=True)
    def __str__(self):
        return self.view + "-" + self.image.url

我有以下查询集:

allProductImages = ProductImage.objects.all()

如何为所有对象提取MEDIA_URL +路径+文件名(例如/media/image.jpg)

这是我已经尝试过的(从之前的queryset语句开始): urlValues = allImages.values('image')

<QuerySet [{'image': 'greenSwatch.jpg'}, {'image': 'blueSwatch.jpg'}, {'image': '3037-outer-black.jpg'}, {'image': '3037-outer-black.png'}]

我正在努力获得以下内容: <QuerySet [{'image': '/media/path/greenSwatch.jpg'}, {'image': '/media/path/blueSwatch.jpg'}, {'image': '/media/path/3037-outer-black.jpg'}, {'image': '/media/path/3037-outer-black.png'}, {'image': '/media/path/3037-inner-blue.png'}, {'image': '/media/path/3037-outer-green.png'}, {'image': '/media/path/3037-outer-blue.png'}]>

另外,我知道没有指定upload_to参数,但根据Django 1.10的docs,这是可选的

我正在运行Django 1.10 + Python 3.5

2 个答案:

答案 0 :(得分:2)

p.image.url为您提供图像的完整URL,将p作为ProductImage实例给出。既然你有一个查询集,你只需要迭代;你不应该使用values

allProductImages = ProductImage.objects.all()
image_urls = [p.image.url for p in allProductImages]

答案 1 :(得分:1)

image.url将为您提供文件的绝对路径