2010-05-17 12 views
1

В моей модели у меня есть manytomany полеDjango Формы - изменить визуализации множественного выбора виджета

mentors = models.ManyToManyField(MentorArea, verbose_name='Areas', blank=True) 

В моей форме я хочу сделать это как:

  1. выпадающего списка со списком все Объекты MentorArea, у которых нет , были связаны с объектом.

  2. Рядом с этим кнопка добавления, которая вызовет функцию javascript , которая добавит ее в объект.

  3. Тогда под этим список уль который имеет каждый выбранный объект MentorArea с кс рядом с ним, который снова вызывает яваскрипт функции, которая будет удалить MentorArea из объекта.

Я знаю, что изменить, как элемент поля визуализируется создание пользовательского виджета и переопределить функцию рендеринга, и я сделал это, чтобы создать кнопку добавления.

class AreaWidget(widgets.Select): 

    def render(self, name, value, attrs=None, choices=()): 
     jquery = u''' 
     <input class="button def" type="button" value="Add" id="Add Area" />''' 

     output = super(AreaWidget, self).render(name, value, attrs, choices) 

     return output + mark_safe(jquery) 

Однако я не знаю, как перечислять выбранные в настоящее время под списком. Может кто-нибудь мне помочь? Также наилучшим способом отфильтровать список, чтобы он отображал только объекты MentorArea, которые не были добавлены? В настоящее время у меня есть поле

но это показывает всех наставников независимо от того, были ли они добавлены или нет.

Благодаря

ответ

1

Для меня функциональности вы описали звучит очень похоже на то, что вы можете достичь с помощью этого ModelAdmin' filter_horizontal и filter_vertical настройки. Виджет, который они отображают, живет в django.contrib.admin.widgets.FilteredSelectMultiple. Вы должны взглянуть на его код!

Смежные вопросы