Как сделать 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 и обработать ответ так, как вы захотите. Конечно, ответ, который я отправляю в представлении, это просто строка, но это может быть и больше данных.

Ответ неполный, но если бы у меня было больше вашего кода, возможно, я смог бы придумать что-то более полное и конкретное, но я думаю, что общая идея работает.

Вернуться на верх