是否可以设置表单的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>
可以这样做吗?
答案 0 :(得分:10)
我能够使用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
答案 1 :(得分:4)
我过去没有在表单上使用外键,而是使用charfield with choices。
具有选项的CharField支持optgroups。您需要以这种格式进行选择:
('第1组',(('1','Yada'),('2','Yada'))),('第2组',(('3','Bepety'),( '4', 'Bopity')))
选择也可以是可调用的。所以我创建了自己的函数来遍历模型并构建一个像上面那样的元组。