0

テーブルから「情報」ボタンをクリックしてフォームを作成し、ユーザー情報を取得してフォームに挿入します。これはすべて機能しますが、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')}

そして、そのユーザーに関連するいくつかの値だけで初期化したいとしましょう(このリストは初期化モードに渡されましたが、機能しません。それでもデフォルトのリストが必要です..)

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)

それは常に示しています

ここに画像の説明を入力

ありがとう!:)

4

1 に答える 1

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
    ...
于 2016-07-22T09:20:51.120 に答える