-
Есть модель под названием Image. Собственно через неё все изображения и сливаются на сервер. С этой моделью всё просто. Есть только аттрибуты name и file. Первый хранит имя картинки, второй хранит ссылку на файл. И есть модель News. Она, по пожеланию заказчика, содержит следующие аттрибуты: name, content и thumbnail. Последний - это собственно ForeignKey с сылкой на модель Image. При выборе thumbnail для модели News используется лист-селектор с "<img src='file.url'>" (именно это возвращается моделью Image с помощью метода __unicode__()).
Проблемы две. Первая: Django автоматически escape-ит img тэг. Как это отключить в админском интерфейсе? Вторая: лист-селектор не отображает изображений, тока текст. Есть ли альтернатива листу-селектору? Изображение должно именно выбираться (пожелание заказчика). Иначе я бы просто сделал аттрибут thumbnail типа ImageField. -
Чтобы джанго не эскейпил тэги можно сделать так:
[code]
function_name(self):
return something_with_tags
function_name.allow_tags = True -
Вторая: лист-селектор не отображает изображений, тока текст. Есть ли альтернатива листу-селектору?
Сделайте свой виджет и подмените либо через собственную форму, либо через
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey -
Александру спасибо за коммент. Работает :). С виджетом не особо хочется возиться (хотя, скорее всего, придётся), т.к. на JS писать код долго и неудобно. А никто не в курсе, есть ли уже готовые решения на JS? Уверен, что не я первый, кто сталкивается с подобной задачей.
-
Надо было мне внимательно документацию почитать. Вторая проблема решается ооочень просто. Для модели News в admin.py создаётся класс NewsAdmin. В этом классе добавляется аттрибут raw_id_fields с сылкой на Image модель. Реализация ниже:
class ItemAdmin(admin.ModelAdmin):
raw_id_fields = ('thumbnail',)
admin.site.register(News, NewsAdmin)
Как результат, вместо селектора появляется очень удобный виджет для выбора Foreign Keys. Обожаю Django и их документацию.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

