如何使用互斥的radiobuttons创建Django表单?

时间:2011-05-12 12:40:59

标签: django-forms radio-button

我需要一个带有两个(互斥)单选按钮的表单,以及它们之间的一些其他控件。我的意思是我需要这样的形式:enter image description here

Here我找到了一种方法来制作一个带有两个互斥的单选按钮的布尔字段,但我不知道如何在它们之间插入其他控件。

1 个答案:

答案 0 :(得分:0)

我建议你把它分成两个(或更多)单独的Django表单和一些客户端JS来点击单选按钮(它们本身不是任何Django表单的一部分)来启用/禁用每组字段)。

例如

class FormA(forms.Form):
    some_field = forms.CharField()
    other_field = forms.CharField()

class FormB(forms.Form):
    third_field = forms.CharField()
    one_more_field = forms.CharField()
在您看来

def my_view(request):
    form_a = None
    form_b = None

    if request.POST:
        if request.POST['choice_field'] == 'a':
            form_a = FormA(prefix='a', data=request.POST)
            if form_a.is_valid():
                # do something
        if request.POST['choice_field'] == 'b':
            form_b = FormB(prefix='b', data=request.POST)
            if form_b.is_valid():
                # do something

    form_a = form_a or FormA(prefix='a')
    form_b = form_b or FormA(prefix='b')

    context = {
        'form_a': form_a,
        'form_b': form_b,
    }
    return render_to_response("my_form.html", context, RequestContext(request))

在你的模板中:

<form action="" method="post">
  <input type="radio" name="choice_field" value="a" />
  <ul>
      {{ form_a.as_ul }}
  </ul>
  <input type="radio" name="choice_field" value="b" />
  <ul>
      {{ form_b.as_ul }}
  </ul>
  <input type="submit" value="Submit" />
</form>