Использовать <optgroup> с form.fields.queryset?

Действительно ли возможно установить queryset поля ForeignKey формы так, чтобы это взяло отдельный queryset's и произвело их в <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')

В моей модели Template у меня есть Шаблоны по умолчанию и созданные Пользователями шаблоны. Я хочу, чтобы они были явно разделены в <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>

Это может быть сделано?

5
задан Matt McCormick 17 December 2009 в 21:25
поделиться

2 ответа

Я смог понять это, используя пример, приведенный в этом блоге

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
10
ответ дан 18 December 2019 в 13:15
поделиться

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

CharField с вариантами выбора поддерживает optgroups. У вас должен быть выбор в следующем формате:

('Группа 1', (('1', 'Яда'), ('2', 'Яда'))), ('Группа 2', (( '3', 'Bepety'), ('4', 'Bopity')))

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

4
ответ дан 18 December 2019 в 13:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: