LINUX.ORG.RU

Django вывод картинки в админке

 


1

1

Всем привет!

Как вывести картинку в форме админки в джанге? пробовал, как по мануалам сделать - проставить readonly_fields, fieldsets/fields, но почему-то у картинки получается другой URL и в итоге 404. Как лучше в этом случае выдавать картинки?

★★

Именно в форме? Я делал просто.

from django.contrib.admin.widgets import AdminFileWidget
from django.template.loader import render_to_string


class ImageWidgetAdmin(AdminFileWidget):
    def render(self, name, value, attrs=None):
        output = str()
        if value and getattr(value, 'url', None):
            output = render_to_string('admin/image_widget.html', {'image': value})
        output += AdminFileWidget.render(self, name, value, attrs)
        return output
Собственно свой виджет.
{% load thumbnail %}
{% thumbnail image '100' as img %}
    <img src="{{ img.url }}" alt="">
{% endthumbnail %}
Шаблон.

FIL ★★★★
()

Я делал функцию в модели (тут использую еще и easy_thumbnails):

    def image_admin(self):
        img = get_thumbnailer(self.image)['room_admin'].url
        return format_html('<img src="{}" />', img)

И уже в admin.py указывал эту функцию как поле для вывода.

gruy ★★★★★
()
Ответ на: комментарий от ism

окей. Это прокатило. А как в джанге делается обращение между классами? например,у меня одна модель содержит OneToOneField с другой моделью, которая содержит изображение. И это изображение должно сохраняться в директорию с id первой модели. То есть мне как-то через instance в upload_to надо перепрыгнуть один класс на уровень вверх не по иерархии наследования, а по иерархии композиции. Тут или как-то в upload_to еще один параметр передавать, или я не знаю.

Конкретный пример - загрузка изображений с дополнительными атрибутами (тегами) конкретным пользователем. Соответственно, есть модель, которая содержит изображение и теги, и она подключается к модели юзера. а как дальше - хз.

aido ★★
() автор топика
Последнее исправление: aido (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.