-
Я нашёл быстрое решение задачи отображения
ImageFieldполей в виде картинок. Для редактирования записи - этоformfield_overridescImageWidgetизform_utils, а для списка записей - метод в модели, возвращающий<img ...с подставленными параметрами, и указание этого метода в спискеlist_displayполей.Решение хоть и работает, но не нравится. Во-первых, приходится добавлять html представление поля из админки к наследникам
models.Model, а не admin.ModelAdmin. Во-вторых,formfield_overridesкажется скорее хаком логики, хоть и документированным, чем логичным изменением представления.Как сделать красиво, неужели все-таки надо будет разобраться в admin шаблонах?
-
Для list_display прекрасно работают методы ModelAdmin
-
Во-первых, приходится добавлять html представление поля из админки к наследникам models.Model, а не admin.ModelAdmin.
То же будет работать и с ModelAdmin:
class MyModelAdmin(ModelAdmin): list_display = ['image_tag'] def image_tag(self, obj): return '<img src="%s">' % obj.image.url image_tag.allow_tags = TrueВо-вторых, formfield_overrides кажется скорее хаком логики, хоть и документированным, чем логичным изменением представления.
А как иначе? Модель про своё представление в админке знать ничего не должна. У неё есть дефолтный виджет, который надо как-то заменить. Есть более глубокие средства: переопределить всю форму, переопределить метод
formfield_for_dbfieldи т.д.formfield_overrides— это просто удобный шорткат для самого частого случая. -
Аркадий, я пробовал, но неправильно определял метод, указывая один
selfаргумент. Соответственно получал ошибку.Иван, большое спасибо за пример. Мне (от незнания), казалось, что представление полей определяется в шаблонах, а на самом деле оказывается, что представление определяют виджеты, и это даже лучше :)
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.


