Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Изображение для поля ImageField в админке для таблицы со StackedInline [RSS Feed]

#1 Янв. 5, 2011 17:40:28

EvgIq
От:
Зарегистрирован: 2009-11-14
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение для поля ImageField в админке для таблицы со StackedInline

Необходимо вставить картинку для поля-изображения в админке.
Есть таблицы “Товар” и “Изображения товара”
Добавление/редактирование/удаление изображений осуществляется в форме Товара через StackedInline.
Сейчас это выглядит так:


Я пошел по пути изменения шаблона для редактирования модели.
Вот кусок кода, переопределенного файла fieldset.html, то место, где выводятся поля формы редактирования:

...
{% for field in line %}
<div{% if not line.fields|length_is:"1" %} class="field-box"{% endif %}>
{% if field.is_checkbox %}
{{ field.field }}{{ field.label_tag }}
{% else %}
{{ field.label_tag }}
{% if field.is_readonly %}
<p>{{ field.contents }}</p>
{% else %}
{{ field.field }}
{% endif %}
{% ifequal field.field.name 'img' %} ****** {% endifequal %}
{% endif %}
{% if field.field.field.help_text %}
<p class="help">{{ field.field.field.help_text|safe }}</p>
{% endif %}
</div>
{% endfor %}
...
Как можно видеть из картинки выше - “звездочки” выводит (на скрине - после кнопки “Обзор”, в коде “{% ifequal field.field.name ‘img’ %} ****** {% endifequal %} ”), т.е. поле и место я нахожу.
Никак не соображу, что написать вместо “звездочек”, чтобы показывало загруженное изображение?
Заранее благодарю.

PS Django 1.2.3



Офлайн

#2 Янв. 6, 2011 03:10:50

EvgIq
От:
Зарегистрирован: 2009-11-14
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение для поля ImageField в админке для таблицы со StackedInline

Решил задачу немного по другому, вот здесь есть описание:
http://djangosnippets.org/snippets/1580/

У себя сделал следующее…добавил в admin.py для модели:
1. код из снипсета, исправил только имя поля изображения на свое, и высоту превьюхи

from django import forms
from django.utils.safestring import mark_safe

class AdminImageWidget(forms.FileInput):
"""
A ImageField Widget for admin that shows a thumbnail.
"""

def __init__(self, attrs={}):
super(AdminImageWidget, self).__init__(attrs)

def render(self, name, value, attrs=None):
output = []
if value and hasattr(value, "url"):
output.append(('<a target="_blank" href="%s">'
'<img src="%s" style="height: 60px;" /></a> '
% (value.url, value.url)))
output.append(super(AdminImageWidget, self).render(name, value, attrs))
return mark_safe(u''.join(output))

class IconForm(forms.ModelForm):
img = forms.ImageField(label='Изображение', widget=AdminImageWidget)
Где “img” в последней строке, имя поля типа ImageField() в таблице изображений (у меня это “ImageForElement”)

2. В класс “ImageForElementInline”, добавил “form”:
class ImageForElementInline(admin.StackedInline):
model = ImageForElement
extra = 0
form = IconForm
Теперь форма редактирования с “кликабельным” превью:



т.е. удалось обойтись без правок шаблонов админки и установок дополнительных библиотек\приложений



Отредактировано (Янв. 6, 2011 03:17:46)

Офлайн

  • Начало
  • » Django
  • » Изображение для поля ImageField в админке для таблицы со StackedInline[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version