1

これらの種類のフィールドが技術的に何と呼ばれるかはわかりませんが、これらはラジオ選択のグループがあるフィールドであり、各フィールドには、関連付けられたラジオが選択された場合にのみ検証されるいくつかの追加フィールドがあります。

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

私が探している重要なもの:

1)そのようなフィールドのレンダリングを支援するための既存のソリューション。つまり、追加のフィールドをオプションでグループ化します。2)(それほど重要ではありませんが)検証を処理するためのショートカット。つまり、オプションが選択されている場合にのみ、追加のフィールドを検証する必要があります。

通常、この種のことを行うと、多くのHTMLを手動で作成する必要があります。これは、再発明を続ける必要がないようにするためのホイールです。

4

1 に答える 1

0

クライアント側では、たとえば(jQueryを使用して)いくつかのjsを使用できます。

$('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 に答える