Мне трудно понять, как интегрировать этот запрос ajax в мое представление.Я все еще учусь интегрировать django с запросами ajax.
Мой первый вопрос: должен ли запрос ajax иметь собственный выделенный URL-адрес?
В моем случае я пытаюсь вызвать его на кнопке, чтобы предварительно сформировать фильтр (запрос преформ).зависит от того, что выбрано в шаблоне).Я реализовал это, используя только django, но он должен делать новый запрос каждый раз, когда пользователь вводит фильтр, который, как я знаю, не эффективен.
Я написал основную функцию, используя JQuery, чтобы убедиться, что связь существует.Всякий раз, когда пользователь изменяет параметр в поле выбора, он выводит значение на консоль.Как вы увидите ниже в представлении, я бы вызвал запрос ajax внутри этой функции представления, если это возможно или правильный способ сделать это.
JQuery - Обновлено
$("#temp").change( function(event) {
var filtered = $(this).val();
console.log($(this).val());
$.ajax({
url : "http://127.0.0.1:8000/req/ajax/",
type : "GET",
data : {
'filtered': filtered
},
dataType: 'json',
success: function(data){
console.log(data)
},
error: function(xhr, errmsg, err){
console.log("error")
console.log(error_data)
}
});
Views.py
def pending_action(request):
requisition_status = ['All', 'Created', 'For Assistance', 'Assistance Complete', 'Assistance Rejected']
FA_status = RequisitionStatus.objects.get(status='For Assistance')
current_status = 'All'
status_list = []
all_status = RequisitionStatus.objects.all()
status_list = [status.status for status in all_status]
# This is where I am handling the filtering currently
if request.GET.get('Filter') in status_list:
user_req_lines_incomplete = RequisitionLine.objects.filter(Q(parent_req__username=request.user) & Q(status__status=request.GET.get('Filter')))
current_status = request.GET.get('Filter')
else:
user_req_lines_incomplete = RequisitionLine.objects.filter(parent_req__username=request.user).exclude(status__status='Completed')
user_reqs = Requisition.objects.filter(par_req_line__in=user_req_lines_incomplete).annotate(aggregated_price=Sum('par_req_line__total_price'),
header_status=Max('par_req_line__status__rating'))
return render(request, 'req/pending_action.html', { 'user_reqs':user_reqs,
'user_req_lines_incomplete':user_req_lines_incomplete,
'requisition_status':requisition_status,
'current_status':current_status,
'FA_status':FA_status})
def filter_status(request):
status = request.GET.get('Filter')
data = {
'filtered': RequisitionLine.objects.filter(Q(parent_req__username=request.user) & Q(status__status=status)),
'current_status': status
}
return JsonResponse(data)
Urls.py
path('pending/', views.pending_action, name='pending_action')