Это моя модель и форма с моим выбором:
class Method(models.Model):
principle = models.CharField(choices=PRINCIPLE_CHOICES, max_length=2)
method = models.CharField(choices=METHOD_CHOICES, max_length=4)
class PartMethodForm(forms.ModelForm):
principle = forms.ChoiceField(
widget=forms.Select(
attrs={'class': 'btn btn-primary'}), choices=PRINCIPLE_CHOICES)
method = forms.ChoiceField(
widget=forms.Select(
attrs={'class': 'btn btn-primary'}), choices=METHOD_CHOICES)
METHOD_CHOICES=(
('1.1','Method 1.1'),
('1.4','Method 1.4'),
('2.2','Method 2.2'),
('10.4','Method 10.4'),
('11.3','Method 11.3')
)
PRINCIPLE_CHOICES=(
('1','Principle 1'),
('2','Principle 2'),
('10','Principle 10'),
('11','Principle 11')
)
На мой взгляд, я передаю свою форму и отфильтрованные списки моих методов и принципов, которые можно выбрать, например,
method = ['1.1','2.2','10.4']
principle = ['1','2']
Я хотел бы достичь следующего:
- выберите принцип (принципы, которых нет в списке, должны быть отключены для выбора)
- при выборе принципа затем показать только возможные методы, например, если принцип 1 -> методы 1.1 и методы 1.4 возможны
- выберите метод (методы, которых нет в списке, должны быть отключены для выбора)
Может кто-нибудь помочь ?
Я придумал только такой подход:
{% block content %}
<div class="container">
<script type="text/javascript">
function showmethod() {
if (document.getElementById('1').checked) {
document.getElementById('div0').style.display = 'block';
document.getElementById('div').style.display = 'block';
}
else {
document.getElementById('div').style.display = 'none';
document.getElementById('div0').style.display = 'none';
}
}
</script>
<h5><b>Choose principle</b></h5>
<form class="mt-5" method="post" name="method-form" id="method-form">
{% csrf_token %}
<div class="col col-md-12">
{% for value, name in form.fields.principle.choices %}
{% if value in principle %}
<input type="radio" onclick="javascript:showmethod();" id="{{ value }}" name="principle" value="{{ value }}">
<label for="{{ value }}"><b>Principle{{ value }}</b><br><br>{{ name }}</label>
{% else %}
<input type="radio" onclick="javascript:showmethod();" id="{{ value }}" name="Principle" value="{{ value }}" disabled>
<label for="{{ value }}"><b>Principle{{ value }}</b><br><br>{{ name }}</label>
{% endif %}
{% endfor %}
</div>
<h5>Choose method</h5>
<div class="col col-md-12" id="div0" style="display:none">
{% for value, name in form.fields.method.choices %}
{% if value|cut:'everything with point and after' %}
{% if value in method %}
<div class="col col-md-2" id="div" style="display:none">
<input type="radio" id="{{ value }}" name="method" value="{{ value }}">
<label for="{{ value }}"><b>Method{{ value }}</b><br><br>{{ name }}</label>
</div>
{% else %}
<input type="radio" id="{{ value }}" name="method" value="{{ value }}" disabled>
<label for="{{ value }}"><b>Method{{ value }}</b><br><br>{{ name }}</label>
{% endif %}
{% endif %}
{% endfor %}
</div>
</div>
</div>
<div class="col-md-6">
<div class="well">
<button class="btn btn-primary float-right" type="submit">Submit</button>
</div>
</div>
</div>
</form>
</div>
{% endblock %}