将 <optgroup> 与 form.fields.queryset 一起使用?
Posted
技术标签:
【中文标题】将 <optgroup> 与 form.fields.queryset 一起使用?【英文标题】:Use <optgroup> with form.fields.queryset? 【发布时间】:2010-12-27 20:06:38 【问题描述】:是否可以设置表单的 ForeignKey 字段的查询集,以便它采用单独的查询集并将它们输出到 <optgroup>
's 中?
这是我所拥有的:
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>
这个可以吗?
【问题讨论】:
【参考方案1】:我能够使用this blog 上给出的示例来解决这个问题
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
【讨论】:
不错!正是博士的命令!我正在寻找一种将 form.fields['field'].queryset 操作为自定义的方法,而 .choices 完全让我忘记了。太好了!【参考方案2】:过去我没有在表单上使用外键,而是使用charfield with choices。
带有选项的 CharField 支持 optgroup。您需要有以下格式的选择:
('Group 1',(('1','Yada'),('2','Yada'))), ('Group 2',(('3','Bepety'),( '4','Bopity')))
Choices 也可以是可调用的。所以我创建了自己的函数来遍历模型并构建一个像上面这样的元组。
【讨论】:
以上是关于将 <optgroup> 与 form.fields.queryset 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
JSON/Ajax 格式请求上的 Select2 optgroup 组