如何从视图更改表单变量值

1 投票
1 回答
508 浏览
提问于 2025-04-16 17:06

我一直在尝试从我的视图中向下面的表单发送数据。

我希望每次调用这个表单时,变量(choices)能有所不同。

class AnswersForm(forms.Form):

question  = forms.RadioSelect
CHOICES=[('sf','asdf')]
radioButton = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())

view.py :

def exam_attend(request, ExamName, questionNo=0):

if ExamName:
    myList = [('b','a')]       
    forms.AnswersForm.CHOICES=myList
    form = forms.AnswersForm()

  variabls = RequestContext(request,{'form':form})
  return render_to_response('exam_pageAttend.html',variabls)

问题是:我需要在表单类中改变变量(CHOICES)的值,而这个值需要在视图类中进行更改(我知道我可以直接用 CHOICES = [('b','a')] 来定义),但我想从视图中来修改它,因为这段代码只是用来展示问题的。

有没有更好的想法呢?

提前谢谢你!

1 个回答

2

你可以通过重写表单的init方法来改变字段的选项(这样它就可以接受一个选择参数),或者根据你的需求在初始化之后再改变字段的选项。

第一种情况可以这样做:

class AnswersForm(forms.Form):
    radioButton = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect())

    def __init__(self, radio_choices= None, *args, **kwargs):
        super(AnswersForm, self).__init__(self, *args, **kwargs)
        if radio_choices is not None:
            self.fields['radioButton'].choices = radio_choices

查看示例:

form_instance = AnswersForm(new_choices)

撰写回答