DJANGO故障注入MultipleChoiceField初始值
问题描述:
我一个表单,点击从表按钮“信息”,我得到的用户信息和注入的形式,所有这些工作为好,但不适合MultipleChoiceField:DJANGO故障注入MultipleChoiceField初始值
data = {'name': name_surname[0], 'surname': name_surname[1], 'c02': retrieved.c02, 'dep': retrieved.dept_no,
'job': retrieved.job_code, 'location': retrieved.c03, 'fbd_role': retrieved.c04, 'team_id': TEAM_ID_RETRIEVED}
form = RegForm(initial=data)
form.set_readonly()
return render(request, insert_form_address,
{'form': form, 'action': 'info', 'pk': pk, 'profiles': profile_list})
,这是我的看法代码,我使用的一个来填补与用户价值的形式,每场都被正确与初始值进行估价,但不是最后一个,TEAM_ID。
数据的例子,以填补TEAM_ID场(这是宣布到表单的默认列表):
TEAM_ID = {('POCM_A09', 'POCM_A09'),
('POCM_A11', 'POCM_A11'),
('POCM_A13', 'POCM_A13'),
('POCM_A15', 'POCM_A15'),
('POCM_A16', 'POCM_A16'),
('POCM_A18', 'POCM_A18')}
而假设我想只是一些值初始化它,涉及到的人该用户(这个列表中的非班利传递给init模式,这是行不通的,它仍然需要默认列表。)
TEAM_ID_RETRIEVED = {('POCM_A09', 'POCM_A09')}
这是形式:
class RegForm(forms.Form):
name = forms.CharField(label='Name', max_length=100)
surname = forms.CharField(label='Surname', max_length=100)
c02 = forms.CharField(label='AD ID', max_length=100)
dep = CustomModelChoiceField(label='Department', queryset=Department.objects.all())
fbd_role = forms.ChoiceField(label='FBD Role', choices=FBD_ROLES, initial=None)
location = forms.ChoiceField(label='Location', choices=LOCATION, initial=None)
job = forms.ChoiceField(label='Job', choices=JOBS)
## Unable to pass a initial value for this field..
team_id= forms.MultipleChoiceField(label='Team', choices=TEAM_ID)
action = None
user_id = None
def __init__(self, *args, **kwargs):
self.user_id = kwargs.pop('pk', None)
self.action = kwargs.pop('action', None)
super(RegForm, self).__init__(*args, **kwargs)
def set_readonly(self):
for field in self.fields:
self.fields[field].required = False
self.fields[field].widget.attrs['disabled'] = 'disabled'
任何想法,我觉得应该是很容易解决...但我不明白问题出在哪里?
对于微型:
data = {'name': name_surname[0], 'surname': name_surname[1], 'c02': retrieved.c02, 'dep': retrieved.dept_no,
'job': retrieved.job_code, 'location': retrieved.c03, 'fbd_role': retrieved.c04, 'team_id': 'POCM_A09'}
form = RegForm(initial=data)
它总是显示
谢谢! :)
答
你只需要设置的值,比如:
initial = {
...
"team_id": ['POCM_A09', ...] # list of all the values selected
...
}
根据我们的聊天讨论,我更新了答案。
您可以覆盖表格__init__()
方法中“MultipleChoiceField”的选项。首先将您的new_choices
传递给表单,然后:
def __init__(self, *args, **kwargs):
new_choices = kwargs.pop('new_choices', None)
super(FORM_NAME, self).__init__(*args, **kwargs)
...
self.fields['team_id'].choices = new_choices
...
它不起作用...始终从列表中取值... – ivoruJavaBoy
更新为列表。你的有一些花括号,为什么? –
您只需要*值*进行初始化,您不需要显示名称。 –