2013-02-28 3 views
4

У меня есть форма в Django:Показать и скрыть динамически поля в Django форме

views.py:

class SearchForm(forms.Form): 
    type = forms.ChoiceField(choices = ...) 
    list1 = forms.ModelMultipleChoiceField(...) 
    list2 = forms.ModelMultipleChoiceField(...) 

home.htm:

<td valign='top'>{{ form.type }}</td> 
<td valign='top'>{{ form.list1 }}</td> 
<td valign='top'>{{ form.list2 }}</td> 
<td valign='top'><input type="submit" value="Find" /></td> 

Я хочу песни1 элемент в будет отображаться, а list2 - скрыть, если тип равен 1, и наоборот, в случае, если тип равен 2. Я хочу, чтобы они были скрыты и отображались динамически без перезагрузки страницы или любого взаимодействия с сервером.

Я считаю, что Javascript может быть полезен здесь, но я этого не знаю.

+0

ли Вы намерены сделать эта работа с или без дальнейшего взаимодействия с сервером? Если вы не хотите, чтобы сервер был задействован, Javascript действительно является единственным способом. Я был бы рад привести пример для обоих случаев, просто сообщите нам, какой метод вы предпочитаете. –

+0

Без, используя jscript. –

ответ

3

Попробуйте это ...

<script>function Hide() 
{ 
    if(document.getElementById('mainselect').options[document.getElementById('mainselect').selectedIndex].value == "1") 
    { 
     document.getElementById('a').style.display = 'none'; 
     document.getElementById('b').style.display = ''; 
    }else 
    { 
     document.getElementById('a').style.display = ''; 
     document.getElementById('b').style.display = 'none' 
    } 
} 
</script> 
<td valign='top'><select id="mainselect" onchange="Hide()"><option value="1">1</option><option value="2">2</option></select></td> 
<td valign='top' id='a'>{{ form.list1 }}</td> 
<td valign='top' id='b'>{{ form.list2 }}</td> 
<td valign='top'><input type="submit" value="Find" /></td> 
+0

Нет, это не сработает. –

+0

Crap - у меня было (вместо {. Попробуйте еще раз. –

+1

Это означает, что сервер или, точнее, контекст шаблона знает о выборе типа, который пользователь взял. –

4

Это адаптация решения Javascript Эндрю, используя Django формы так, как вы обычно ожидаете.

Форма в Django/Python:

class SearchForm(forms.Form): 
    type = forms.ChoiceField(choices = ((1, 'One'), (2, 'Two'))) 

    # Use any form fields you need, CharField for simplicity reasons 
    list1 = forms.CharField() 
    list2 = forms.CharField() 

Шаблон, предполагая, что экземпляр SearchForm был принят в контексте шаблона с именем «формы»:

<script> 
function Hide() { 
    if(document.getElementById('id_type').options[document.getElementById('id_type').selectedIndex].value == "1") { 
     document.getElementById('id_list1').style.display = 'none'; 
     document.getElementById('id_list2').style.display = ''; 
    } else { 
     document.getElementById('id_list1').style.display = ''; 
     document.getElementById('id_list2').style.display = 'none'; 
    } 
} 

window.onload = function() { 
    document.getElementById('id_type').onchange = Hide; 
}; 
</script> 

<div> 
    {{ form.type.label_tag }}{{ form.type }} 
</div> 
<div> 
    {{ form.list1.label_tag }}{{ form.list1 }} 
</div> 
<div> 
    {{ form.list2.label_tag }}{{ form.list2 }} 
</div> 
+0

Я не вижу, что он также скроет ярлык. – ismailsunni

+0

@ismailsunni, если вы jquery можете скрыть метку: $ ('# id_list1'). Parent(). Hide(); В чистом javascript можно использовать .parentElement – Gere

Смежные вопросы