如何检查ChoiceField中的项目是否被选中?
问题描述:
在形式我想使用包含有不尚未选定ChoiceField所有项目的列表。为了做到这一点,我想通过选择迭代并丢弃所选择的那些(即选择在他们的HTML =“选择”)如何检查ChoiceField中的项目是否被选中?
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:我可以在self.fields[].choices.__iter__
上调用next()
来遍历选项,但是如何确定选择是否被选中?
答
形式的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]
现有形式这只作品。当添加了新的形式(MethodForm是一个formset的一部分),现有的值仍然排除,但在新添加的形式的值不是。任何想法,我怎么能包括这些呢? – 2012-08-04 01:27:26
没关系,发现根据你的答案+自己的一个新形式的情况下,一些家庭酿造的解决方案。 – 2012-08-04 01:45:57