这是我得到的回溯
Traceback (most recent call last):
File "/home/kali/django-test-app/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner
response = get_response(request)
File "/home/kali/django-test-app/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in \_get_response
response = wrapped_callback(request, \*callback_args, \*\*callback_kwargs)
File "/home/kali/django-test-app/src/django-test-app/testapp/quizes/views.py", line 46, in save_quiz_view
question = Question.objects.get(text=k)
File "/home/kali/django-test-app/venv/lib/python3.10/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(\*args, \*\*kwargs)
File "/home/kali/django-test-app/venv/lib/python3.10/site-packages/django/db/models/query.py", line 650, in get
raise self.model.DoesNotExist(
questions.models.Question.DoesNotExist: Question matching query does not exist.
\[01/Apr/2023 13:30:02\] "POST /3/save/ HTTP/1.1" 500 76917
我正在使用 request.is_ajax() 然后我意识到它已被删除所以我将其更改为
if request.headers.get('x-requested-with') == 'XMLHttpRequest':
它没有用,我还尝试创建一个检查功能
def is_ajax(request):
return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
并在 request.is_ajax() 时使用: 仍然收到 questions.models.Question.DoesNotExist: 问题匹配查询不存在。 **这是我的views.py **
from django.shortcuts import render
from .models import Quiz
from django.views.generic import ListView
from django.http import JsonResponse
from questions.models import Question, Answer
from results.models import Result
from django.shortcuts import HttpResponse
from django.shortcuts import get_object_or_404
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 is_ajax(request):
return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
def save_quiz_view(request, pk):
if request.headers.get('x-requested-with') == 'XMLHttpRequest':
\# if request.is_ajax():
\# if request.accepts('application/x-www-form-urlencoded'):
questions = \[\]
data = request.POST
data\_ = dict(data.lists())
data_.pop('csrfmiddlewaretoken')
for k in data_.keys():
print('key: ', k)
question = Question.objects.get(text=k)
questions.append(question)
print(questions)
user = request.user
quiz = Quiz.objects.get(pk=pk)
score = 0
multiplier = 100 / quiz.number_of_questions
results = []
correct_answer = None
for q in questions:
a_selected = request.POST.get(q.text)
if a_selected != "":
question_answers = Answer.objects.filter(question=q)
for a in question_answers:
if a_selected == a.text:
if a.correct:
score += 1
correct_answer = a.text
else:
if a.correct:
correct_answer = a.text
results.append({str(q): {'correct_answer': correct_answer, 'answered': a_selected}})
else:
results.append({str(q): 'not answered'})
score_ = score * multiplier
Result.objects.create(quiz=quiz, user=user, score=score_)
if score_ >= quiz.required_score_to_pass:
return JsonResponse({'passed': True, 'score': score_, 'results': results})
else:
return JsonResponse({'passed': False, 'score': score_, 'results': results})
这是ajax函数
$.ajax({
headers: { "X-CSRFToken": csrftoken },
type: 'POST',
url: `${url}save/`,
data: data,
success: function(response){
const results = response.results
console.log(results)
quizForm.classList.add('not-visible')
scoreBox.innerHTML = `${response.passed ? 'Congratulations! ' : 'Ups..:( '}Your result is ${response.score.toFixed(2)}%`
results.forEach(res=>{
const resDiv = document.createElement("div")
for (const [question, resp] of Object.entries(res)){
resDiv.innerHTML += question
const cls = ['container', 'p-3', 'text-light', 'h6']
resDiv.classList.add(...cls)
if (resp=='not answered') {
resDiv.innerHTML += '- not answered'
resDiv.classList.add('bg-danger')
}
else {
const answer = resp['answered']
const correct = resp['correct_answer']
if (answer == correct) {
resDiv.classList.add('bg-success')
resDiv.innerHTML += ` answered: ${answer}`
} else {
resDiv.classList.add('bg-danger')
resDiv.innerHTML += ` | correct answer: ${correct}`
resDiv.innerHTML += ` | answered: ${answer}`
}
}
}
resultBox.append(resDiv)
})
},
error: function(error){
console.log(error)
}
})
}
quizForm.addEventListener('submit', e=>{
e.preventDefault()
sendData()
})
• 使用pyside6的QFileDialog.getSaveFileName保存文件,点击保存按钮
• 如何解决java spring boot应用中的单一职责原则问题
• 如何从玩笑中触发 useEffect(没有酶安装),它依赖于 useMutation 查询的响应
• bootstrap 模式在更新到 bootstrap 3.3.0 后停止运行
• 如何使用 localStorage 在重新加载页面时使按钮保持禁用状态?
• 如何在 android 中按后退按钮或主页按钮最小化应用程序
• 为什么在Apache IoTDB中按时间戳降序查询结果无法返回?
• Flutter 错误“PathNotFoundException:无法打开文件,路径”
• Rspec Mysql2::错误:保存点 active_record_1 不存在:回滚到保存点 active_record_1
• SQL Server 更新查询需要运行两次才能成功[关闭]
• 如何在 Joomla xml 配置文件的文本类型上保存特殊字符?
• 使用 React Native blemanager 我遇到权限问题