Форма редактирования данных объекта
Я делаю приложение на 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.