1

我不确定这些类型的字段在技术上被称为什么,但它们是您拥有一组无线电选择的字段,并且每个字段都可以有一些额外的字段,这些字段只有在选择其关联的无线电时才会得到验证。

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

我正在寻找的关键内容:

1) 任何现有的用于帮助渲染此类字段的解决方案。即用它们的选项对附加字段进行分组。2)(不那么重要)处理验证的任何快捷方式,即仅在选择了选项时才验证其他字段。

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

4

1 回答 1

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')

当然,如果你有很多这种情况,你应该先尝试像这样简单的东西,然后重构。

于 2012-08-29T13:33:56.423 回答