Установите начальные значения в ModelMultipleChoiceField CheckboxSelectMultiple виджета, используя список - PullRequest
0 голосов
/ 30 июня 2018

У меня есть 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 Ответ

0 голосов
/ 03 июля 2018

Итак, решение, которое я искал, заключается в том, что вам нужно предоставить список ключей набора запросов, которые должны быть установлены в True.

Так например

self.fields['priority_field'].initial = ['1024', '1025']

, где 1024 и 1025 - это числа объектов набора запросов, которые должны быть отмечены как True

Для контекста я пытался временно сохранить все отмеченные элементы из моей формы в ключе request.session, если пользователь выбрал другую страницу, а затем восстановить отмеченные элементы, когда пользователь вернулся в форму.

Решение:

  1. Сохранить список ключей в переменной сеанса, когда пользователь покидает страницу с помощью request.POST.getlist ():

    request.session['selected_priorities_keys'] = request.POST.getlist('priority_field')
    
  2. Проверка, существует ли сеансовый ключ при перезагрузке страницы

    if 'selected_priorities_keys' in request.session:
        checked_key_list = request.session['selected_priorities_keys']
    else:
        checked_key_list = []
    
  3. Передайте этот список в форму init и используйте его для инициализации поля ModelMultipleChoiceField.

    self.initial['priority_field'] = checked_key_list
    
...