我试图建立多层次的'选择'这是基于2个模型。你知道吗
第一个模型“组” 第二个模型“类别”
我想看到这样的“选择”:
<select>
<optgroup label="Swedish Cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
</optgroup>
<optgroup label="German Cars">
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</optgroup>
</select>
self.fields["category"].choices = select
我使用下一个代码构建变量“select”:
group=Group.objects.all()
for i in group:
if len(select)<=0:
select=[(i.name)]
else:
select.append(i.name)
for n in Category.objects.filter(maingroup_id=i.id):
select.append((str(n.id), n.name),)
print(select)
'Swedish Cars', ('volvo', 'Volvo'), ('saab', 'Saab'), 'German Cars',('mercedes', 'Mercedes'), ('audi', 'Audi')
但“select”变量中的值不适用于下一个代码:
self.fields["category"].choices = select
如果我手动创建带有下一个值的“select”变量,它就会工作:
('Swedish Cars', (('volvo', ' Volvo'), ('saab', 'Saab'))),('German Cars', (('mercedes', 'Mercedes'), ('audi', 'Audi')))
看看由您的代码生成的列表和手工提供的列表,有一些区别。你知道吗
这是由您的代码生成的,在每个顶级元素后分成新行:
这是你亲手提供的:
如您所见,正确的列表只包含2个顶级元素,但您的代码正在生成包含6个元素的列表。在顶层应该只有2个元组元素,其中元组的第一个元素是group的label,第二个元素包含子元素的列表。子元素的列表也应该只包含2元组元素,其中元组的第一个元素应该是您选择的值,第二个元素是该值的标签。你知道吗
更正代码:
或更多的Python版本:
相关问题 更多 >
编程相关推荐