2016-07-22 5 views
0

Ich habe ein Formular, klicken Sie auf die Schaltfläche "info" aus einer Tabelle, ich bekomme die Benutzerinformationen und injizieren in das Formular, all dies funktioniert auch, aber nicht für die MultipleChoiceField:DJANGO Problem, den MultipleChoiceField Initialwert

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}) 

dies ist meine Ansicht Code, den ich verwende Sie das Formular mit den Benutzerwerten zu füllen, hat jedes Feld korrekt mit dem Anfangswert bewertet worden, aber nicht die letzten, team_id.

Ein Beispiel für Daten, die die team_id Feld zu füllen ist (Dies ist die Standardliste in das Formular angegeben):

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')} 

Und nehmen wir an, ich es mit nur ein paar Werte init wollen, die diejenigen für dass Benutzer (diese Liste hat beene in dem init-Modus übergeben, funktioniert es nicht, es dauert noch die Standardliste ..)

TEAM_ID_RETRIEVED = {('POCM_A09', 'POCM_A09')} 

Dies ist die Form:

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' 

Jede Idee, ich glaube, etwas einfach zu beheben sein sollte ... aber ich verstehe nicht, wo das Problem ist ...

Für Tiny:

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) 

es immer zeigt

enter image description here

DANK! :)

Antwort

3

Sie müssen nur die Werte setzen, wie:

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

Wie pro unsere Chat-Diskussion, die ich die Antwort bin zu aktualisieren.

Sie können die Auswahl des "MultipleChoiceField" innerhalb der Form __init__() Methode überschreiben. Zuerst Ihre new_choices in das Formular übergeben, dann:

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

Es funktioniert nicht ... immer Werte nahmen aus der Liste ... – ivoruJavaBoy

+0

als Liste aktualisiert. Sie haben geschweifte Klammern, warum? –

+0

Sie benötigen nur die * Werte * für die Initialisierung, Sie benötigen keine Anzeigenamen. –