Использовать <optgroup>с form.fields.queryset? - PullRequest
5 голосов
/ 18 декабря 2009

Можно ли установить набор запросов поля ForeignKey формы, чтобы он брал отдельные наборы запросов и выводил их в <optgroup>?

Вот что у меня есть:

views.py

form = TemplateFormBasic(initial={'template': digest.template.id})
form.fields['template'].queryset = Template.objects.filter(Q(default=1) | Q(user=request.user)).order_by('name')

В моей модели шаблонов у меня есть шаблоны по умолчанию и созданные пользователем шаблоны. Я хочу, чтобы они были видимо разделены в поле <select>, например

<select>
  <optgroup label="Default Templates">
    <option>Default 1</option>
    <option>Default 2</option>
  </optgroup>
  <optgroup label="User Templates">
    <option>User Template 1</option>
    <option>User Template 2</option>
  </optgroup>
</select>

Можно ли это сделать?

Ответы [ 2 ]

10 голосов
/ 18 декабря 2009

Мне удалось понять это на примере, приведенном на этом блоге

views.py

form.fields['template'].choices = templates_as_choices(request)

def templates_as_choices(request):
    templates = []
    default = []
    user = []
    for template in Template.objects.filter(default=1).order_by('name'):
        default.append([template.id, template.name])

    for template in Template.objects.filter(user=request.user).order_by('name'):
        user.append([template.id, template.name])

    templates.append(['Default Templates', default])
    templates.append(['User Templates', user])

    return templates
4 голосов
/ 18 декабря 2009

В прошлом я использовал не внешний ключ в форме, а charfield с вариантами .

CharField с возможностью выбора оптгрупп. У вас должен быть выбор в этом формате:

(«Группа 1», ((«1», «Яда»), («2», «Яда»))), («Группа 2», ((«3», «Бепти»), ( '4', 'Bopity')))

Выбор также может быть вызван. Поэтому я создал свою собственную функцию, которая обходит модели и создает кортеж, подобный приведенному выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...