4

Django で親フィールドの選択に基づいてフィールドを条件付きで非表示または表示する方法について質問があります。

**更新: JavaScript で関数を定義することにより、この機能を実装することができます。これは、いくつかの単純な HTML コードでテストされています。ただし、私の入力テーブルは Django によって作成されているため、Django の「onchange」でこの関数を呼び出す方法を誰か教えてもらえますか? **

最終更新: これを行うには jQuery を使用する方が簡単だと思います。 jQuery: ドロップダウン ボックスの選択に基づいて条件付きで要素を表示する

Javascript: 説明: 1. 選択を行う前に、「適用方法」ドロップダウン メニューのみが表示されます 2. 親ボックスから「空中スプレー」を選択すると、新しいドロップダウン メニュー「空中サイズ分布」が表示されます 3 . 親ボックスから「グラウンド スプレー」を選択した場合は、別のドロップ ダウン リスト「グラウンド スプレー タイプ」に入力する必要があります。

<script type="text/javascript">
function display(obj,id1,id2) {
txt = obj.options[obj.selectedIndex].value;
document.getElementById(id1).style.display = 'none';
document.getElementById(id2).style.display = 'none';

if ( txt.match(id1) ) {document.getElementById(id1).style.display = 'block';}
if ( txt.match(id2) ) {document.getElementById(id2).style.display = 'block';}
</script>

<table>
<tbody align="center">
<tr><th>Application method:</th>
<td><select onchange="display(this,'A','B')" name="method" id="id_method">
<option value="">Pick a method</option>
<option value="A">Aerial Spray</option>
<option value="B">Ground Spray</option>
</select></td></tr></tbody>

<tbody id="A" align="center" style="display: none;">
<tr><th><label for="id_aerial_size_dist">Aerial Size Dist:</label></th><td><select select name="aerial_size_dist" id="id_aerial_size_dist">
<option value="" selected="selected">Pick first</option>
<option value="A1">Very Fine to Fine</option>
<option value="A2">Fine to Medium (EFED Default)</option>
</select></td></tr>
</tr>
</tbody>

<tbody id="B" align="center" style="display: none;">
<tr><th><label for="id_spray_type">Ground spray type:</label></th><td><select name="spray_type" id="id_spray_type">
<option value="B1" selected="selected">Low Boom Ground Sprayer (20 Inches or Less)</option>
<option value="B2">High Boom Ground Sprayer (20 to 50 Inches: EFED Default)</option>
</select></td></tr></tbody></table>

現在動作しない Django コード。定義されたすべての関数「display」についてヘルプが必要です。

更新、mark_safe を追加した後、コードが機能します。

class GENEECInp(forms.Form):
    application_method = forms.ChoiceField(required=True, choices=applicationmethod_CHOICES, initial='Aerial Spray',
                                           widget=forms.Select(attrs={'onchange':mark_safe("display(this,'A','B','C','D');")})
4

1 に答える 1

0

適切なフィールドを非表示または再表示するには、カスタム JavaScript が必要になります。このウィジェットに JavaScript はありますか?

于 2012-04-13T15:52:33.640 に答える