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})
Вернуться на верх