Я пытаюсь создать способ отображения только определенных полей в форме django на основе связанных данных другого поля внутри той же формы. Я знаком с идеей form.field.bound_type, но я не уверен, как постоянно проверять изменение состояния на поле в форме и соответственно обновлять другое поле. Что-то вроде, если вы заполняете заявку и спрашиваете, совершили ли вы преступление, если вы нажмете «да», появится всплывающая область с информацией.Поле формы отображения на основе других полей в форме Django
Я использую: Django 1.8.4 Bootstrap3 6.6.2
Как относится к этому вопросу. Вот что я получил в настоящее время с значениями полей, отредактированными для защиты работы. Это делает СОРТ работы. Значение формы прекрасное, оператор if работает вначале, но он не переоценивает значение if, если указанное поле изменилось.
<form action= "/send_email/" method="post" class='col-sm-5'>
{% csrf_token %}
{% bootstrap_field form.field_one%}
{% bootstrap_field form.field_two%}
{% bootstrap_field form.field_three%}
{% if form.field_three.bound_data == "A Value" %}
{% bootstrap_field form.field_four%}
{% endif %}
{% buttons %}
<button type="submit" class="btn btn-primary">
{% bootstrap_icon "glyphicon glyphicon-ok-circle" %} Submit
</button>
{% endbuttons %}
</form>
Решение: С помощью Берди, я был в состоянии выяснить решения. Для тех, кто попал в эту же проблему, связанную с Django, вы можете указать, как вы добавляете или удаляете поля на основе другого поля в той же форме.
<script>
// function that hides/shows field_four based upon field_three value
function check_field_value(new_val) {
if(new_val != 'A value') {
// #id_field_four should be actually the id of the HTML element
// that surrounds everything you want to hide. Since you did
// not post your HTML I can't finish this part for you.
$('#field_four').removeClass('hidden');
} else {
$('#field_four').addClass('hidden');
}
}
// this is executed once when the page loads
$(document).ready(function() {
// set things up so my function will be called when field_three changes
$('#field_three').change(function() {
check_field_value(this.value);
});
});
</script>
<form action= "/send_email/" method="post" class='col-sm-5'>
{% csrf_token %}
{% bootstrap_field form.field_one%}
{% bootstrap_field form.field_two%}
<div id="field_three">{% bootstrap_field form.field_three%}</div>
<div id="field_four">{% bootstrap_field form.additional_notes %}</div>
{% buttons %}
<button type="submit" class="btn btn-primary">
{% bootstrap_icon "glyphicon glyphicon-ok-circle" %} Submit
</button>
{% endbuttons %}
</form>
Все эти всплывающие окна, которые вы видите из других веб-сайтов реализованы с использованием ajax, чтобы получить некоторые данные или, по крайней мере, с помощью javascript, чтобы скрыть/показать определенную область в вашем шаблоне. Django не обрабатывает динамическую нагрузку без обновления страницы. –
Шан прав. Вам нужно использовать javascript. Причина, по которой вы не можете сделать это в шаблоне, заключается в том, что шаблон обрабатывается на сервере, ONCE, когда страница сначала создается. Таким образом, ваш «if» будет смотреть только на данные, как это было, когда страница была впервые сгенерирована. После отправки страницы в браузер шаблон больше не задействован. Итак, что вам нужно сделать, это добавить обработчики javascript «change» (возможно, вы хотите использовать jquery для этого) для вашего поля field_three, а затем, когда этот обработчик запущен, проверьте значение в поле и установите field_four css, чтобы он был скрыт, если это что вам нужно. –
В основном вам нужно научиться jQuery, чтобы делать такие вещи, потому что все это происходит в браузере. –