30.06.2009 15:14

  1. gurunars

    0 ↑
    0 ↓
    Есть модель под названием Image. Собственно через неё все изображения и сливаются на сервер. С этой моделью всё просто. Есть только аттрибуты name и file. Первый хранит имя картинки, второй хранит ссылку на файл. И есть модель News. Она, по пожеланию заказчика, содержит следующие аттрибуты: name, content и thumbnail. Последний - это собственно ForeignKey с сылкой на модель Image. При выборе thumbnail для модели News используется лист-селектор с "<img src='file.url'>" (именно это возвращается моделью Image с помощью метода __unicode__()).

    Проблемы две. Первая: Django автоматически escape-ит img тэг. Как это отключить в админском интерфейсе? Вторая: лист-селектор не отображает изображений, тока текст. Есть ли альтернатива листу-селектору? Изображение должно именно выбираться (пожелание заказчика). Иначе я бы просто сделал аттрибут thumbnail типа ImageField.
  2. Чтобы джанго не эскейпил тэги можно сделать так:
    [code]
    function_name(self):
    return something_with_tags
    function_name.allow_tags = True
  3. anonymous

    0 ↑
    0 ↓
    Вторая: лист-селектор не отображает изображений, тока текст. Есть ли альтернатива листу-селектору?


    Сделайте свой виджет и подмените либо через собственную форму, либо через
    http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey
  4. gurunars

    0 ↑
    0 ↓
    Александру спасибо за коммент. Работает :). С виджетом не особо хочется возиться (хотя, скорее всего, придётся), т.к. на JS писать код долго и неудобно. А никто не в курсе, есть ли уже готовые решения на JS? Уверен, что не я первый, кто сталкивается с подобной задачей.
  5. gurunars

    0 ↑
    0 ↓
    Надо было мне внимательно документацию почитать. Вторая проблема решается ооочень просто. Для модели News в admin.py создаётся класс NewsAdmin. В этом классе добавляется аттрибут raw_id_fields с сылкой на Image модель. Реализация ниже:

    class ItemAdmin(admin.ModelAdmin):
    raw_id_fields = ('thumbnail',)

    admin.site.register(News, NewsAdmin)

    Как результат, вместо селектора появляется очень удобный виджет для выбора Foreign Keys. Обожаю Django и их документацию.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.