我正在尝试从具有多个相关下拉菜单的一张表中筛选数据库结果。这是我到目前为止所拥有的。
<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 }}
来填充第二个下拉过滤器,但是它是空的。
模板中的change函数起作用,因此当我选择“ 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来过滤这样的数据库。因此,仅在第二个下拉列表中显示所有值。还是我必须更改视图以将不同的数据发送到模板。
任何帮助将不胜感激。我在这个问题上停留了太久了。