使用列表在 ModelMultipleChoiceField CheckboxSelectMultiple 小部件上设置初始值
Set initial values on ModelMultipleChoiceField CheckboxSelectMultiple widget using list
我有一个 ModelMultipleChoiceField 表单,它是用查询集生成的。
class NewEvaluationPriorityForm(forms.Form):
priority_field = forms.ModelMultipleChoiceField(
queryset=None,
widget=forms.CheckboxSelectMultiple,
required=False
)
def __init__(self, user_type, qi_list, hgiours_list, is_hgiours_evaluation, school, *args, **kwargs):
super(NewEvaluationPriorityForm, self).__init__(*args, **kwargs)
if is_hgiours_evaluation is True:
priorities = Priority.objects.get_new_hgiours_evaluation_priorities(
hgiours_list,
school
)
else:
priorities = Priority.objects.get_new_evaluation_priorities(
qi_list,
user_type,
school
)
self.fields['priority_field'].queryset = priorities
self.fields['priority_field'].label = ''
我想做的是使用列表设置字段中不同复选框的初始值。我尝试了以下方法(我知道查询集中有 5 个对象):
self.fields['priority_field'].initial = [True, False, True, False, True]
但这不起作用。
我需要做什么?
所以我正在寻找的解决方案是您需要提供要设置为 True 的查询集键列表。
例如
self.fields['priority_field'].initial = ['1024', '1025']
其中 1024 和 1025 是应该检查为 True 的查询集对象的 pks
对于上下文,如果用户选择了不同的页面,我试图将我表单中的所有选中项目临时保存在 request.session 键中,然后在用户返回表单时恢复选中项目。
解决方法:
当用户使用 request.POST.getlist():
离开页面时,将键列表存储在会话变量中
request.session['selected_priorities_keys'] = request.POST.getlist('priority_field')
测试页面重新加载时session key是否存在
if 'selected_priorities_keys' in request.session:
checked_key_list = request.session['selected_priorities_keys']
else:
checked_key_list = []
将此列表传递给表单 init 并使用它来初始化 ModelMultipleChoiceField 字段。
self.initial['priority_field'] = checked_key_list
我有一个 ModelMultipleChoiceField 表单,它是用查询集生成的。
class NewEvaluationPriorityForm(forms.Form):
priority_field = forms.ModelMultipleChoiceField(
queryset=None,
widget=forms.CheckboxSelectMultiple,
required=False
)
def __init__(self, user_type, qi_list, hgiours_list, is_hgiours_evaluation, school, *args, **kwargs):
super(NewEvaluationPriorityForm, self).__init__(*args, **kwargs)
if is_hgiours_evaluation is True:
priorities = Priority.objects.get_new_hgiours_evaluation_priorities(
hgiours_list,
school
)
else:
priorities = Priority.objects.get_new_evaluation_priorities(
qi_list,
user_type,
school
)
self.fields['priority_field'].queryset = priorities
self.fields['priority_field'].label = ''
我想做的是使用列表设置字段中不同复选框的初始值。我尝试了以下方法(我知道查询集中有 5 个对象):
self.fields['priority_field'].initial = [True, False, True, False, True]
但这不起作用。
我需要做什么?
所以我正在寻找的解决方案是您需要提供要设置为 True 的查询集键列表。
例如
self.fields['priority_field'].initial = ['1024', '1025']
其中 1024 和 1025 是应该检查为 True 的查询集对象的 pks
对于上下文,如果用户选择了不同的页面,我试图将我表单中的所有选中项目临时保存在 request.session 键中,然后在用户返回表单时恢复选中项目。
解决方法:
当用户使用 request.POST.getlist():
离开页面时,将键列表存储在会话变量中request.session['selected_priorities_keys'] = request.POST.getlist('priority_field')
测试页面重新加载时session key是否存在
if 'selected_priorities_keys' in request.session: checked_key_list = request.session['selected_priorities_keys'] else: checked_key_list = []
将此列表传递给表单 init 并使用它来初始化 ModelMultipleChoiceField 字段。
self.initial['priority_field'] = checked_key_list