Установите начальные значения в ModelMultipleChoiceField CheckboxSelectMultiple виджета, используя список
У меня есть 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]
Но это не работает.
Что мне нужно сделать?
1 ответ
Поэтому решение, которое я искал, заключается в том, что вам нужно предоставить список ключей набора запросов, для которых необходимо установить значение True.
Так например
self.fields['priority_field'].initial = ['1024', '1025']
где 1024 и 1025 - это pks объектов queryset, которые должны быть отмечены как True
Для контекста я пытался временно сохранить все отмеченные элементы из моей формы в ключе request.session, если пользователь выбрал другую страницу, а затем восстановить отмеченные элементы, когда пользователь вернулся в форму.
Решение:
Сохраните список ключей в переменной сеанса, когда пользователь покидает страницу с помощью request.POST.getlist():
request.session['selected_priorities_keys'] = request.POST.getlist('priority_field')
Проверьте, существует ли сеансовый ключ при перезагрузке страницы
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