Django设计带有附加字段的单选按钮的模式

时间:2012-08-29 13:29:29

标签: python django forms

我不确定这些字段在技术上是什么叫做,但它们是你有一组无线电选择的字段,每个字段都可以添加一些其他字段,只有在选择了相关的无线电时才会得到验证。

Field Label:
(*) Option 1
( ) Option 2 [Additional Field]
( ) Option 3 [Another Field], [Maybe Two]

我正在寻找的关键事项:

1)任何现有的帮助渲染此类字段的解决方案。即将附加字段与其选项分组。 2)(并不重要)处理验证的任何快捷方式,即只有在选择了其选项时才能验证附加字段。

通常当我做这种事情时,我最终不得不手动编写很多HTML,这是一个轮子,我宁愿避免重新发明。

1 个答案:

答案 0 :(得分:0)

在客户端,您可以使用一些js,例如(使用jQuery):

$('input[name=your_radio_field_name]').change(function() {
    switch ($(this).val()) {
        case 'option1_value':
            $('input[name=extra_field_for_option2], input[name=extra_field_for_option3]').hide();
            break;
        case 'option2_value':
            $('input[name=extra_field_for_option2]').show();
            $('input[name=extra_field_for_option3]').hide();
            break;
        // and so on ...
    } 
})

在服务器端,您可以使用此类字段验证功能:

def clean_extra_field_for_option2(self):
    if self.cleaned_data.get('your_radio_field_name') != 'option_2_value':
        return None
    return self.cleaned_data.get('extra_field_for_option2')

def clean_extra_field_for_option3(self):
    if self.cleaned_data.get('your_radio_field_name') != 'option_3_value':
        return None
    return self.cleaned_data.get('extra_field_for_option3')

当然,如果您经常遇到这种情况,首先应该尝试这样简单的事情,然后重构。