Как я могу получить 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

Вернуться на верх