Как получить url поля ImageField при использовании QuerySet.values?
qs = self.items.values(
...,
product_preview_image=F('product_option_value__product__preview_image'),
).annotate(
item_count=Count('product_option_value'),
total_amount=Sum('amount'),
)
product_option_value__product__preview_image
- это ImageField, и в результирующем QuerySet оно выглядит как product_preview_images/photo_2022-12-10_21.38.55.jpeg
.
Проблема в том, что url
является свойством, и я не могу использовать параметры media
, так как изображения хранятся в S3-совместимом хранилище.
Можно ли каким-то образом обогатить результирующий QuerySet с URL-адресами изображений одним дополнительным запросом, не итерируя каждый из них?
Вы можете изменять значения словаря Queryset следующим образом...
models.py
class DEMOClass(models.Model):
field1 = models.CharField(max_length=255, null=True,blank=True)
field2 = models.ImageField(upload_to='Images')
def __str__(self):
return self.field1
views.py
def InsertData(request):
data = DEMOClass.objects.values('field1','field2')
print('------ Before ------')
print(data)
for i in data:
i.update({'field2':str(request.build_absolute_uri(i['field2']))})
print('------ After ------')
print(data)
Выход
------ Before ------
<QuerySet [{'field1': 'test', 'field2': 'Images/download_rBWYYCh.jpg'}]>
------ After ------
<QuerySet [{'field1': 'test', 'field2': 'http://127.0.0.1:8000/Images/download_rBWYYCh.jpg'}]>