Как я могу получить url изображения в queryset.values()?
У меня есть модель пользователя следующего вида:
class CustomUser(AbstractUser):
...
email = models.EmailField(unique=True)
profile_pic = models.ImageField(null=True, blank=True, upload_to=content_file_name)
def content_file_name(obj, filename):
ext = filename.split('.')[-1]
filename = "profile_pic_{0}.{1}".format(str(obj.user.id), str(ext))
return os.path.join(filename)
Я знаю, что могу получить путь к носителю изображения profile_pic, используя user.profile_pic.url.
Но, как я могу получить путь к носителю изображения в queryset.values()?
Я пробовал queryset.values("profile_pic_url") и queryset.values("profile_pic__url"), но это не работает.
Я могу аннотировать profile_pic с помощью F-Objects и добавить путь к медиа в качестве префикса с помощью f-string, как показано ниже
users = queryset.annotate(image_path=F("profile_pic")).values("image_path")
and then I can add prefix like f"/media/{user.image_path}"
Я не думаю, что в values() есть какой-то способ, потому что я тоже застрял на этом, и единственным решением, на которое я наткнулся, было это.
product_image_url = []
for image in bundle_product_images:
print("@@@@@@@@",image.image.url)
product_image_url.append(image.image.url)
Но если вы хотите использовать это в шаблонах, то лучший способ - использовать Jinja.
{% for image in images %}
{{image.url}}
{% endfor%}
Я не уверен насчет получения url изображения в queryset.values(), но у меня есть другое решение для вас.
Вы можете использовать {% get_media_prefix %} в шаблоне Django, чтобы получить MEDIA_URL и затем использовать {{user.profile_pic}}
Ex:
<img src="{% get_media_prefix %}{{user.profile_pic}}/>
Он будет отображаться как
<img src="media/<path_to_profile_pic>" />
Реферат о {% get_media_prefix %} : Django Docs