如何在Django中将变量传递给表单单选按钮?

时间:2018-09-30 00:08:49

标签: django django-models django-forms

我有一个表格(下面的代码),将答案纳入响应模型。答案总是在1-3的范围内,但可能引用了各种不同的问题。

form.py

from Django import forms
RESPONSE_CHOICES = (
   ('1', '1. Happy'),
   ('2', '2. Neutral'),
   ('3', '3. Sad'),
)
class ResponseForm(forms.Form):
    quid = forms.IntegerField()
    response = forms.ChoiceField(choices=RESPONSE_CHOICES, widget=forms.RadioSelect())

quidID模型中question的外键。

template.html中,我有:

<form action="" method="post">
  {% csrf_token %}
  {{ form }}

  <input type="submit" />
</form>

有没有一种方法可以在表单模板的单选按钮中设置quid的值,呈现如下所示:

    <label>1</label>
    <input type="radio" value="1" name="{{ question.id }}">
    <label>2</label>
    <input type="radio" value="2" name="{{ question.id }}">
    <label>3</label>
    <input type="radio" value="3" name="{{ question.id }}">

1 个答案:

答案 0 :(得分:0)

您可以在初始化中设置表单值,并执行以下操作:

class ResponseForm(forms.Form):
    quid = forms.IntegerField()
    response = forms.ChoiceField(choices=RESPONSE_CHOICES, widget=forms.RadioSelect())

    def __init__(self, *args, **kwargs):
        super(ResponseForm, self).__init__( *args, **kwargs)
        field_value=Question.objects.get(id=kwargs["id"]).response
        self.fields['response'].initial = field_value

请注意,这假定您正在使用id参数创建表单。

form = ResponseForm(id=quid)#quid is the relevant id

您还需要制定一个空白表格的计划。

但是,我的建议是:

  • 在问题模型中使用外键代替整数id,这将使您的生活更轻松。

  • 使用Modelform代替Form,它将自动完成上面的所有操作。