2016-07-22 3 views
0

У меня есть форма, нажимая кнопку «информация» из таблицы, я получаю информацию о пользователе и вставляю ее в форму, все это работает, но не для 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')} 

И давайте предположим, что я хочу, чтобы инициализировать его только с некоторыми значениями, те, связанные с что пользователь (этот список Beene передается в режиме инициализации, он не работает, он по-прежнему занимает список по умолчанию ..)

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) 

это всегда показывает

enter image description here

СПАСИБО! :)

ответ

3

Вам нужно только установить значение, как:

initial = { 
    ... 
    "team_id": ['POCM_A09', ...] # list of all the values selected 
    ... 
} 

Согласно нашему чату обсуждения я обновляю ответ.

Вы можете отменить выбор «MultipleChoiceField» внутри формы __init__() метод. Сначала проходить 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 
    ... 
+0

Это не работает ... всегда брал значения из списка ... – ivoruJavaBoy

+0

Обновлено в виде списка. Почему у вас есть фигурные скобки? –

+0

Вам нужны только * значения * для инициализации, вам не нужны отображаемые имена. –

 Смежные вопросы

  • Нет связанных вопросов^_^