在表单中,我想使用一个列表,其中包含ChoiceField中尚未选择 not 的所有项目。为了做到这一点,我想迭代选择并丢弃所选的(即在他们的html中选择=“选中”)
class MethodForm(ModelForm):
def __init__(self, *args, **kwargs):
super(MethodForm, self).__init__(*args, **kwargs)
#pseudo-code starts here
exclude = []
for val in self.fields['someM2Mfield'].choices:
exclude.append(val.is_selected)
#/pseudocode
rule_choices = get_rule_choices(exclude)
self.fields['rule'] = forms.ChoiceField(rule_choices)
...
伪代码位是我不知道使用什么方法/属性的地方。谁能开导我?
PS:我可以通过在next()
上调用self.fields[].choices.__iter__
来迭代选择,但如何确定是否选择了该选项?
答案 0 :(得分:1)
表单self.inital
应该为您提供一个字典,其中包含表单所有字段的初始值。因此self.initial['someM2Mfield']
应返回已选择的值。如果您需要所选选项的列表,您可能会执行以下操作:
selected_values = self.initial['someM2Mfield']
rule_choices = [(value, text) for value, text in
self.fields['someM2Mfield'].choices
if value in selected_values]