Форма редактирования данных объекта

Я делаю приложение на django, которое позволяет мне учиться. В нем есть несколько тестов с несколькими вопросами в каждом. Каждый вопрос имеет один правильный ответ. Я пытаюсь сделать форму, которая позволит мне редактировать ответ, если я ошибся в передаче правильного ответа во время создания вопроса.

Это то, что я уже сделал:

models.py

class Question(models.Model):

    text = models.CharField(max_length=200, null=True)
    test = models.ForeignKey(Test, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add = True)

    def get_answer(self):
        return self.answer_set.all()

    def __str__(self):
        return self.text

class Answer(models.Model):
    text = models.CharField(max_length=200)
    question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='parent')
    def __str__(self):
         return self.text
forms.py

class AnswerEditForm(ModelForm):
    class Meta:
        model = Answer
        exclude = ('question',)

views.py

def UpdateAnswerView(request, pk):
    form = AnswerEditForm()

    if request.method == 'POST':
        form = AnswerEditForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.question = Question.objects.get(id=pk)
            
            obj.save()
            return redirect('home')

    context = {'form':form}
    return render(request, 'exam/update_answer.html', context)
urls.py
urlpatterns = [
    ~some other urls~
    path('answer/edit/<int:pk>/', views.UpdateAnswerView, name='update-answer'), 

]

Пока я пытаюсь редактировать ответ, я получаю ошибку Question matching query does not exist.. Где я допустил ошибку?

Возможно, pk это None.
лучше проверьте свои pk

def UpdateAnswerView(request, pk):
    form = AnswerEditForm()

    if request.method == 'POST' and pk is not None:
        form = AnswerEditForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            try:
               obj.question = Question.objects.get(id=pk)
               obj.save()
               return redirect('home')
            except Question.DoesNotExist:
               pass
          

    context = {'form':form}
    return render(request, 'exam/update_answer.html', context)

Вы должны убедиться, что pk действительно передается в UpdateAnswerView. Также убедитесь, что вы действительно передаете идентификатор Question, а не идентификатор Answer.

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