2017-11-22 9 views
1

私はiptsというフィールドを持つDjangoフォームを持っています。デフォルトではコンテンツはchoices=(('', '-'*20),)です。Django UpdateViewはフォームフィールドの選択肢を拡張します

UpdateViewでは、このリストをさらに多くのオプションで拡張します。 したがって、get_context_dataに私はフォームを取得し、そのリストを拡張します。

choices = form.fields['ipts'].choices 
choices = choices.extend([('IPTS-123', 'IPTS-454545'),]) 

render_to_response方法で、私は form.fields['ipts'].choicesを印刷し、選択肢がうまく移入されたことを確認するには、私は私が期待していたものを持っている:テンプレートはこれらの選択肢が取り込まれていないが

[('', '--------------------'), ('IPTS-123', 'IPTS-454545')]

('', '--------------------')

クラスベースビューで選択肢フィールドを拡張する方法はありますか?

提案は大歓迎です。ありがとう。

編集:ここ

ビューコード:

class ProfileReductionUpdate(LoginRequiredMixin, SuccessMessageMixin, 
          UpdateView): 
    ''' 

    ''' 
    model = UserProfile 
    form_class = UserProfileReductionForm 
    template_name = 'users/profile_reduction_form.html' 
    # fields = '__all__' 
    success_url = reverse_lazy('index') 
    success_message = "Your Profile for the Reduction was updated successfully." 

    def get(self, request, *args, **kwargs): 
     print("*** get") 

     return super(ProfileReductionUpdate, self).get(request, *args, **kwargs) 

    def get_context_data(self, **kwargs): 
     print("*** get_context_data") 

     context = super(ProfileReductionUpdate, self).get_context_data(**kwargs) 

     from pprint import pprint 
     # pprint(context) 
     import copy 
     form = context['form'] 
     print("Form:") 
     pprint(form) 

     choices = form.fields['ipts'].choices 
     choices = choices.extend([('IPTS-123', 'IPTS-454545'),]) 

     pprint(form.fields['ipts'].choices) 

     # form.fields['ipts'].choices = choices 

     context['form'] = form 
     pprint(context['form'].fields['ipts'].choices) 
     return context 

    def render_to_response(self, context, **response_kwargs): 

     print("*** render_to_response") 
     from pprint import pprint 
     pprint(context) 
     pprint(response_kwargs) 


     form = context['form'] 
     print("Form:") 
     pprint(form) 
     print("Form ipts choices:") 
     pprint(form.fields['ipts'].choices) 
     pprint(form.fields['ipts']._choices) 

     # pprint(dir(form.fields['ipts'])) 

     return super(ProfileReductionUpdate, self).render_to_response(context, **response_kwargs) 

ここ出力:

*** get 
[22/Nov/2017 10:22:14] DEBUG [server.apps.users.models:60] QuerySet 
*** get_context_data 
Form: 
<UserProfileReductionForm bound=False, valid=Unknown, fields=(ipts;experiment)> 
[('', '--------------------'), ('IPTS-123', 'IPTS-454545')] 
[('', '--------------------'), ('IPTS-123', 'IPTS-454545')] 
*** render_to_response 
{'form': <UserProfileReductionForm bound=False, valid=Unknown, fields=(ipts;experiment)>, 
'object': <UserProfile: rhf>, 
'userprofile': <UserProfile: rhf>, 
'view': <server.apps.users.views.ProfileReductionUpdate object at 0x7f0d29d14b70>} 
{} 
Form: 
<UserProfileReductionForm bound=False, valid=Unknown, fields=(ipts;experiment)> 
Form ipts choices: 
[('', '--------------------'), ('IPTS-123', 'IPTS-454545')] 
[('', '--------------------'), ('IPTS-123', 'IPTS-454545')] 

編集2:

フォーム:

class UserProfileReductionForm(forms.ModelForm): 
    ''' 
    ''' 
    def __init__(self, *args, **kwargs): 
     super(UserProfileReductionForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper(self) 
     self.helper.form_class = 'form-horizontal' 

     self.helper.layout.append(Submit('submit', 'Save')) 
     self.helper.layout.append(Button('cancel', 'Cancel', 
             css_class='btn-default', 
             onclick="window.history.back()")) 
    class Meta: 
     model = UserProfile 
     # exclude = ['user'] 
     fields = ['ipts', 'experiment'] 

モデル:

ipts = models.CharField(
     "Integrated Proposal Tracking System (IPTS)", 
     max_length=20, 
     blank=True, 
     choices=(('', '-'*20),) 
+0

テンプレートを表示できますか? – scharette

+0

そして残りのビューコード。 –

+0

テンプレートはシンプルです。「{%crispy form%}」と{{%csrf_token%} {{form}} 'の両方で同様の結果を試しました。 – RicLeal

答えて

0

OK!私はそれを考え出した!

移入するフィールドは次のとおりです。 form.fields['ipts'].widget.choices

ない: form.fields['ipts'].choices

は、それが他の人に役立ちます願っています!

関連する問題