ValueError at /quiz/None/newquestion Поле 'id' ожидало число, но получило 'None'
В моем приложении викторины вот мой код views.py
def NewQuiz(request):
quizForm=forms.QuizForm()
if request.method=='POST':
quizForm=forms.QuizForm(request.POST)
if quizForm.is_valid():
quiz= quizForm.save(commit=False)
quiz_id = quiz.id
else:
print("form is invalid")
return redirect('quiz:new-question',quiz_id=quiz_id)
return render(request,'quiz/createquiz.html',{'quizForm':quizForm})
#create new question
def NewQuestion(request,quiz_id):
user = request.user
quiz = get_object_or_404(Quizzes, id=quiz_id)
questionForm=forms.QuestionForm()
if request.method=='POST':
questionForm=forms.QuestionForm(request.POST)
if questionForm.is_valid():
question=questionForm.save(commit=False)
#quiz=models.quiz.objects.get(id=request.POST.get('quizID'))
question.quiz=quiz
question.save()
else:
print("form is invalid")
return redirect('quiz:new-question',quiz_id=quiz_id)
return render(request,'quiz/createqusetion.html',{'questionForm':questionForm})
и вот мой urls.py
from django.urls import path
from . import views
app_name="quiz"
urlpatterns = [
path('quiz/newquiz', views.NewQuiz, name='new-quiz'),
path('quiz/<quiz_id>/newquestion', views.NewQuestion, name='new-question'),
path('quiz/<quiz_id>/quizdetail', views.QuizDetail, name='quiz-detail'),
path('quiz/<quiz_id>/take', views.TakeQuiz, name='take-quiz'),
path('check-marks/<quiz_id>', views.check_marks_view,name='check-marks'),
path('quiz/calculate-marks', views.calculate_marks_view,name='calculate-marks'),
path('calculate-marks', views.calculate_marks_view,name='calculate-marks'),
path('check-marks/<int:pk>', views.check_marks_view,name='check-marks'),
]
и я получил вышеупомянутую ошибку, я изменил путь на int:quiz_id, но ошибка осталась прежней, кто может мне помочь?
remove commit = False. когда вы используете commit = False. тогда он вернет объект, который еще не был сохранен в базе данных, что означает, что у него еще нет id.
вам не нужно присваивать id. просто вызовите метод сохранения с присвоением id
UPDATE
def NewQuiz(request):
quizForm=forms.QuizForm()
if request.method=='POST':
quizForm=forms.QuizForm(request.POST)
if quizForm.is_valid():
quiz= quizForm.save()
quiz_id = quiz.id
return redirect('quiz:new-question',quiz_id=quiz_id)
else:
print("form is invalid")
return render(request,'quiz/createquiz.html',{'quizForm':quizForm})