Ajax-запрос к Django возвращает 500 внутренних ошибок сервера
Яm pretty new in Django and I
пытаюсь собрать данные с помощью Ajax.
Кроме того, я хотел бы добавить, что яm trying to make and edit quiz app from tutorial(so I
делаю это по учебнику, а не с нуля.
После нажатия на кнопку я получил ошибку
console.log('hello world quiz')
const url = window.location.href
console.log(url)
$.ajax({
type: 'GET',
url: `${url}data`,
success:function(response){
console.log(response)
},
error: function(error){
console.log(error)
}
})
Я вижу, что путь неправильный, он должен быть: http://127.0.0.1:8000/1/, not http://127.0.0.1:8000/1/data. Но изменение от:
url: `${url}data`,
to:
url: `${url}`,
не собирает информацию о количестве массивов и т.д.
У меня также есть ошибка из терминала:
Traceback (последний последний вызов): Файл "/home/ad/Documents/myvenv/lib/python3.8/site-packages/django/core/handlers/exception.py", строка 34, в inner response = get_response(request) Файл "/home/ad/Documents/myvenv/lib/python3.8/site-packages/django/core/handlers/base.py", строка 115, в _get_response response = self.process_exception_by_middleware(e, request) Файл "/home/ad/Documents/myvenv/lib/python3.8/site-packages/django/core/handlers/base.py", строка 113, в _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/ad/Documents/test01/src/quizes/views.py", line 20, in quiz_data_view для q в quiz.get_questions(): File "/home/ad/Documents/test01/src/quizes/models.py", line 22, in get_questions return self.question_set.all[:self.number_of_questions] TypeError: 'method' object is not subscriptable
.
Но я понятия не имею, что можно изменить в quizes/models.py:
from typing import Text
from django.shortcuts import render
from .models import Quiz
from django.views.generic import ListView
from django.http import JsonResponse
# Create your views here.
class QuizListView(ListView):
model = Quiz
template_name = 'quizes/main.html'
def quiz_view(request, pk):
quiz = Quiz.objects.get(pk=pk)
return render(request, 'quizes/quiz.html', {'obj': quiz})
def quiz_data_view(request, pk):
quiz = Quiz.objects.get(pk=pk)
questions = []
for q in quiz.get_questions():
answers = []
for a in q.get_answers():
answers.append(a.text)
questions.append({str(q): answers})
return JsonResponse({
'data': questions,
'time': quiz.time,
})
или quizes/views.py:
from typing import Text
from django.shortcuts import render
from .models import Quiz
from django.views.generic import ListView
from django.http import JsonResponse
# Create your views here.
class QuizListView(ListView):
model = Quiz
template_name = 'quizes/main.html'
def quiz_view(request, pk):
quiz = Quiz.objects.get(pk=pk)
return render(request, 'quizes/quiz.html', {'obj': quiz})
def quiz_data_view(request, pk):
quiz = Quiz.objects.get(pk=pk)
questions = []
for q in quiz.get_questions():
answers = []
for a in q.get_answers():
answers.append(a.text)
questions.append({str(q): answers})
return JsonResponse({
'data': questions,
'time': quiz.time,
})
Можете ли вы помочь мне с некоторыми идеями?
def get_questions(self):
return self.question_set.all[:self.number_of_questions]
должно быть:
def get_questions(self):
return self.question_set.all()[:self.number_of_questions]
И это работает.