Получение проблемы при редактировании записи в Django Form

Все у меня возникает проблема при редактировании записи на основе идентификатора проблемы, только запись о проблеме отображается автоматически, чат-вопрос и запись о варианте не отображаются автоматически, возможно, мой ORM ошибается. Даже когда я сохраняю запись получаю ошибку, пожалуйста, помогите мне. Это грубая операция, я сделал список и добавить запись, но это тоже сложно, если кто-то может сделать просто, это будет более полезно для меня. Спасибо.

models.py - это все 3 модели.

class Problem(models.Model):
    Language = models.IntegerField(choices=Language_CHOICE, default=1)
    type = models.CharField(max_length=500, null=True, blank=True)

    def __str__(self):
        return self.type
        

class ChatQuestion(models.Model):
    question = RichTextField(null=True, blank=True)
    problem_id = models.ForeignKey(
        Problem,
        models.CASCADE,
        verbose_name='Problem',
    )
    sub_problem_id = models.ForeignKey(
        SubProblem,
        models.CASCADE,
        verbose_name='Sub Problem',
        null=True,
        blank=True
    )

    def __str__(self):
        return self.question


class Option(models.Model):
    option_type = models.CharField(max_length=250, null=True, blank=True)
    question_id = models.ForeignKey(
        ChatQuestion,
        models.CASCADE,
        verbose_name='Question',
    )
    problem=models.ForeignKey(
        Problem,
        models.CASCADE,
        verbose_name='Problem',
        null=True,
        blank=True
    )
    next_question_id = models.ForeignKey(ChatQuestion, on_delete=models.CASCADE, null=True, blank=True,
                                         related_name='next_question')

forms.py

class Editchatbot(forms.Form):
    problem=forms.ModelChoiceField(queryset=Problem.objects.all(), required=True, widget=forms.Select(attrs={'class': 'form-control select2'}))
    question=forms.ModelChoiceField(queryset=ChatQuestion.objects.all(), required=True, widget=forms.Select(attrs={'class': 'form-control select2'}))
    option=forms.ModelChoiceField(queryset=Option.objects.all(), required=True, widget=forms.Select(attrs={'class': 'form-control select2'}))
    class Meta:
        fields=['problem','question','option']

views.py

def edit_chatbot(request,id=None):
    problem=Problem.objects.get(pk=id)
    question=ChatQuestion.objects.filter(problem_id=id)
    option=Option.objects.filter(question_id=id)
    if request.method == 'POST':
        form = Editchatbot(request.POST)
        if form.is_valid():
            problem=form.changed_data['problem']
            question=form.changed_data['question']
            option=form.changed_data['option']
            form.save()
            messages.success(request,'successfully!')
            return redirect('/fleet/chatbot_list')
        else:
            messages.error(request,'Please correct following',form.errors)
    else:
        form = Editchatbot(initial={'problem':problem,'question':question,'option':option})
    context = {
        'menu_management': 'active',
        'chatbot': 'active',
        'form': form,
        'question':question,
        'option':option
    }
    return render(request, "chatbot/edit_chatbot.html", context=context)

ошибка вывода

Traceback (most recent call last):
  File "C:\Users\HI\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\HI\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\HI\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "E:\20_jan_2022_everest\everest_jarvis\fleet\views.py", line 4126, in edit_chatbot
    problem=form.changed_data['problem']
TypeError: list indices must be integers or slices, not str
ERROR "POST /fleet/chatbot/edit/1 HTTP/1.1" 500 79771
ERROR Internal Server Error: /fleet/chatbot/edit/1
Traceback (most recent call last):
  File "C:\Users\HI\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\HI\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\HI\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "E:\20_jan_2022_everest\everest_jarvis\fleet\views.py", line 4126, in edit_chatbot
    problem=form.changed_data['problem']
TypeError: list indices must be integers or slices, not str
ERROR "POST /fleet/chatbot/edit/1 HTTP/1.1" 500 79771

Измените эти три строки, используя changed_data на cleaned_data.

changed_data - это список, содержащий имена полей, в которых произошли изменения, он не содержит самих изменений. cleaned_data сохраняет данные после валидации. Подробнее см. в документации Проверка того, какие данные формы изменились

problem=form.cleaned_data['problem']
question=form.cleaned_data['question']
option=form.cleaned_data['option']
Вернуться на верх