使用带有form.fields.queryset的<optgroup>?

Mat*_*ick 5 python django django-forms django-queryset

是否可以设置一个表单的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')
Run Code Online (Sandbox Code Playgroud)

在我的模板模型中,我有默认模板和用户创建的模板.我希望它们在<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>
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?

Mat*_*ick 10

我能够使用此博客上给出的示例来解决这个问题

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
Run Code Online (Sandbox Code Playgroud)