Как сделать queryset со значением, поступающим из функции javascript?
Когда пользователь нажимает на чекбокс, значение будет отправлено в javascript-функцию, которая примет значение и асинхронно проверит, есть ли оно в базе данных, но я не знаю, возможно ли это в Django, я видел сериализаторы, но не думаю, что они будут работать, потому что это не только получение данных из базы данных, но и выполнение запроса. Есть ли способ сделать это?
requisite = requisite.objects.filter(requisite__discipline__id=33)
код выше получит нужные мне данные, но мне нужно получить это число из кода ниже
<input class="form-check-input" type="checkbox" value="{{ discipline.id }}" id="flexCheckDefault{{ discipline.name }}" onclick="checkRequisite(this.defaultValue)">
Сначала создайте представление, которое будет получать информацию от вашего JavaScript:
# views.py
from django.http import JsonResponse
def check_requisite(request, dis_id):
# NOTE: I changed the class name from requisite to Requisite
# class names should be capitalized
requisite = Requisite.objects.filter(requisite__discipline__id=dis_id)
if requisite:
return JsonResponse({'answer': 'It IS in the database'})
else:
return JsonResponse({'answer': 'NOT in the database'})
Далее, добавьте путь к этому представлению:
# urls.py
urlpatterns = [
...
path('check_requisite/<int:dis_id>', views.check_requisite, name='check_requisite'),
...
]
Затем, в вашем js-файле, или в вашем AJAX-запросе:
async function check_requisite(e) {
const check = await fetch('/check_requisite/' + e.target.value);
const answer = await check.json();
return answer;
}
Ваша функция checkRequisite
может вызвать вышеуказанную функцию async и обработать ответ так, как вы захотите. Конечно, ответ, который я отправляю в представлении, это просто строка, но это может быть и больше данных.
Ответ неполный, но если бы у меня было больше вашего кода, возможно, я смог бы придумать что-то более полное и конкретное, но я думаю, что общая идея работает.