【发布时间】:2019-03-25 11:32:45
【问题描述】:
我正在尝试构建过滤器,在单击时过滤列表(选项值)。我知道还有其他类似的问题,但我似乎无法掌握它。
views.py
def gps_list(request):
selected_programme = request.GET.get("selected_programme", None)
gps = GoodPractice.objects.filter(
id__in=ProgrammeList.objects.filter(programme__exact=selected_programme))
print(gps)
data = serializers.serialize("json", gps)
return JsonResponse(data, safe=False)
这是我的脚本
<script>
$("#programme").change(function () {
event.preventDefault();
var selected_programme = $(this).val();
console.log(selected_programme);
$.ajax({
url: '{% url "gps_list" %}',
data: {
"selected_programme": selected_programme,
},
dataType: 'json',
success: function(response) {
alert(response);
},
error: function(response) {
alert("oh no!");
}
});
});
</script>
<div class="row">
<div class="form-group col-sm-4">
<fieldset>
<legend>Select programme type:</legend>
<label for="programme">Programme type: *<abbr title="required"></abbr></label>
<form action="{% url 'gps' %}" method="get">
<select class="form-control" id="programme" name="progr" size="6" multiple>
{% for programme in progr %}
<option value={{programme.id}} {% if programme.id in progr_selected %}selected{% endif %}>{{programme.name}}</option>
{% endfor %}
</select>
</div>
</div>
{% autoescape off %}
{% for gp in gps %}
<div class="row">
<div class="col-md-12">
<h2 class="my-4">{{gp.name}}
<small>{{gp.country}}</small>
</h2>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="card mb-4">
<div class="card-body">
<h2 class="card-title">{{gp.programme_type}}</h2>
<p class="card-text">{{gp.what}}</p>
<a href="{% url 'gps' %}/{{gp.id}}" class="btn btn-primary">Read More →</a>
</div>
</div>
</div>
</div>
</fieldset>
{% endfor %}
{% endautoescape %}
</div>
所以,我需要找到一种方法来过滤{{gp.name}}、{{gp.country}}
{{gp.programme_type}} & {{gp.what}}.
目前print(gps) 工作正常。
拥有alert(response) 显示数据,但是当我使用alert(response.data) 时,我收到undefined。
【问题讨论】:
-
您已经添加了 AJAX 代码。怎么了?
-
AJAX 调用没有链接到 btn,而且我很确定我也需要在 views.py 中实现 AJAX,因为目前还没有。
-
但我不知道该怎么做,我一直在寻找一段时间。
标签: jquery ajax django database object