Получение логической ошибки при выполнении запроса put в среде Django rest

#django #django-rest-framework

Вопрос:

моя модель

 class QuestionModel(models.Model):
    question = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    doubt_class_id = models.ForeignKey(DoubtClasses, on_delete=models.CASCADE, null=True, blank=True)
    conceptual_class_id = models.ForeignKey(LiveClass_details, on_delete=models.CASCADE, null=True, blank=True)
    mentor = models.ForeignKey(Mentor, on_delete=models.CASCADE, null=True, blank=True)
    answer = models.TextField(default='')
 

Я создал поле ответа для редактирования только суперпользователем с помощью администратора вопросов

класс QuestionAdmin(администратор.Администратор модели):

     readonly_fields = ['answer']

    def get_readonly_fields(self, request, obj=None):
        if request.user.is_superuser:
            return []
        else:
            return self.readonly_fields

admin.site.register(QuestionModel, QuestionAdmin)
 

мой views.py

 def put(self, request, type_of_class=None,pk=None):
        if int(request.data.get('author')) != self.request.user.id:
            return Response("you cannot edit othe user question", status=status.HTTP_405_METHOD_NOT_ALLOWED)
        if pk:
            question_id = models.QuestionModel.objects.filter(id=pk).first()
            #if answer originally exists
            if len(question_id.answer) > 0:
                self.update(request, type_of_class, pk)
                #this means answer is just updated
                if len(question_id.answer) > 0 :
                    return Response("Successfully updated answer", status=status.HTTP_200_OK)
                # this means that answer is deleted so decrease doubt address count
                else:
                    if type_of_class =='doubtclass':
                        class_id = question_id.doubt_class_id
                    elif type_of_class == 'liveclass':
                        class_id = question_id.conceptual_class_id
                    class_id.doubtsAddressed -= 1
                    class_id.save()
                    return Response("Successfully deleted answer", status=status.HTTP_200_OK)

            #if answer is not originally there
            self.update(request, type_of_class, pk)
            #this means that a student has updated his answer
            if question_id.answer == '':
                return Response("successfully updated a question", status=status.HTTP_200_OK)
            #this means that a mentor has posted a answer
            if type_of_class =='doubtclass':
                print("type_of_class =='doubtclass'")
                class_id = question_id.doubt_class_id
            elif type_of_class == 'liveclass':
                print("type_of_class =='conceptual_class'")
                class_id = question_id.conceptual_class_id
                print(class_id)
            class_id.doubtsAddressed  = 1
            class_id.save()
            return Response("Successfully posted answer", status=status.HTTP_200_OK)

        else:
            return Response(status=status.HTTP_204_NO_CONTENT)
 

мой urls.py

  path('questions/<str:type_of_class>/<int:pk>/',views.QuestionModelViewID.as_view()),
 

моя логика

В запросе put студент может опубликовать вопрос , но не может обновить поле ответа, поэтому я проверяю, равна ли длина ответа 0 или не 0, если во время запроса put длина ответа равна 0, а после этого не равна нулю, это означает, что наставник опубликовал ответ, сделайте что-нибудь, иначе студент обновил свой вопрос. Если во время запроса put длина ответа на запрос не равна нулю, а после нее равна 0, то наставник удалил этот ответ или его длина изменилась, то Наставник только что обновил ответ

my error

I am currently a superuser, if originally answer length is 0 then it is working fine else it is not updating the answer field while making put request