【问题标题】:How can I pass a value to Django Form's init method from a view?如何从视图将值传递给 Django Form init 方法?
【发布时间】:2015-03-28 01:42:35
【问题描述】:

forms.py

class AddDuration(forms.Form):

    def __init__(self, *args, **kwargs): 
        super(AddDuration, self).__init__(*args, **kwargs)
        // set value to relates_to_choices
        relates_to_choices = ????????????? // Something like self.choices
        self.fields['duration'].choices = relates_to_choices

    duration = forms.ChoiceField(required=True)

现在,我有一个包含类的 views.py 文件

class AddDurationView(FormView):
    template_name = 'physician/add_duration.html'
    form_class = AddDurationForm

【问题讨论】:

    标签: django forms views init choicefield


    【解决方案1】:

    覆盖视图上的get_form_kwargs() 方法。

    views.py

    class AddDurationView(FormView):
        template_name = 'physician/add_duration.html'
        form_class = AddDurationForm
    
        def get_form_kwargs(self):
            kwargs = super(AddDurationView, self).get_form_kwargs()
            kwargs['duration_choices'] = (
                ('key1', 'display value 1'),
                ('key2', 'display value 2'),
            )
            return kwargs
    

    forms.py

    class AddDurationForm(forms.Form):
        duration = forms.ChoiceField(required=True)
    
        def __init__(self, duration_choices, *args, **kwargs): 
            super(AddDurationForm, self).__init__(*args, **kwargs)
            // set value to duration_choices
            self.fields['duration'].choices = duration_choices
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 2019-03-17
      • 2015-01-21
      相关资源
      最近更新 更多