Я пытаюсь отфильтровать результаты базы данных из одной таблицы с несколькими зависимыми выпадающими меню. Вот что у меня так далеко.
<form method="POST" id = "form1">
{% csrf_token %}
{{ filter.form }}
<button name="filter_port" type="submit">Search</button>
</form>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$("#id_gebaeudebereich").change(function () {
var gebaeudebereich = $(this).val();
$.ajax({
data: {
'gebaeudebereich': gebaeudebereich
},
success: function (data) {
$('#id_gebaeudenummer').html(data);
}
});
});
</script>
Я использую внешнюю библиотеку django_filter для фильтрации результатов базы данных. Вот мои filters.py
class CSVFilter(django_filters.FilterSet):
entries = Excel3.objects.values_list('gebaeudebereich', flat = True).distinct()
gebaeudebereich_auswahl = [(e, e) for e in entries]
#print("e" , gebaeudebereich_auswahl)
gebaeudebereich = django_filters.ChoiceFilter(choices = gebaeudebereich_auswahl)
entries = Excel3.objects.values_list('gebaeudenummer', flat=True).distinct()
gebaeudenummer_auswahl = [(e, e) for e in entries]
gebaeudenummer = django_filters.ChoiceFilter(choices=gebaeudenummer_auswahl)
entries = Excel3.objects.values_list('ebene', flat=True).distinct()
ebene_auswahl = [(e, e) for e in entries]
ebene = django_filters.ChoiceFilter(choices=ebene_auswahl)
entries = Excel3.objects.values_list('raum', flat=True).distinct()
raum_auswahl = [(e, e) for e in entries]
raum = django_filters.ChoiceFilter(choices=raum_auswahl)
И, наконец, мои views.py
def filter(request):
gb = request.GET.get("gebaeudebereich")
entries = Excel3.objects.filter(gebaeudebereich=gb).values_list("gebaeudenummer", flat=True).distinct()
gn = [(e) for e in entries]
print(gn)
instance = Excel3.objects.values()
user_filter = CSVFilter(request.POST or None, queryset=instance)
return render(request, 'music/filter.html', {'filter': user_filter, 'gn' : gn})
Когда я печатаю gn, он принадлежит значению, которое я выбрал в выпадающем меню. Но использование переменной в jquery не работает. Я пытался {{ gn }}
заполнить второй выпадающий фильтр, но он пуст.
Функция изменения в шаблоне работает, поэтому, когда я выбираю значение "id_gebaeudebereich", во втором раскрывающемся списке что-то меняется с помощью "id_gebaeudenummer". Однако ничего не отображается, и потому что у меня нет отношения ForeignKey между значениями. Учебники и то, что я не нашел, не могут быть применены к моей проблеме.
Чтобы отфильтровать результаты, путь Django будет:
Model.objects.filter(gebaeudebereich = "selected value in the first dropdown").values_list("gebaeudenummer", flat= True).distinct()
И в SQL:
SELECT gebaeudenummer FROM db_table WHERE gebaeudebereich = "selected value"
Так что есть способ отфильтровать базу данных с помощью jquery в моем шаблоне. Так что отображать только значения принадлежности во втором раскрывающемся списке. Или мне нужно изменить представление для отправки различных данных в шаблон.
Любая помощь будет принята с благодарностью. Я застрял с этой проблемой слишком долго.