Как обрабатывать ответы на вопросы практики прямо на сервере, а результаты немедленно обновлять на данных о практике с помощью Django

Я хочу обрабатывать ответы на вопросы практики непосредственно на сервере, а результаты немедленно обновлять в данных практики, так что когда пользователь открывает данные практики, значение данных практики уже доступно.

models.py

class PracticeAnswer(models.Model):
    practice_answer_id = models.BigAutoField(primary_key=True)
    practice_answer = models.CharField(max_length=255, default=None, blank=True)
    practice = models.ForeignKey(Practice, models.DO_NOTHING, default=None)
    question = models.ForeignKey('Question', models.DO_NOTHING, default=None)

    def __str__(self):
        return str(self.practice_answer_id)

class Practice(models.Model):
    practice_id = models.BigAutoField(primary_key=True)
    score = models.SmallIntegerField(null=True)
    correct = models.SmallIntegerField(null=True)

    def __str__(self):
        return str(self.practice_id)

class Question(models.Model):
    question_id = models.BigAutoField(primary_key=True)
    question = models.TextField()
    question_answer = models.CharField(max_length=255)
    multiple_choice_a = models.CharField(max_length=255)
    multiple_choice_b = models.CharField(max_length=255)
    multiple_choice_c = models.CharField(max_length=255)

    def __str__(self):
        return self.question

class User(models.Model):
    user_id = models.BigAutoField(primary_key=True)
    fullname = models.CharField(max_length=50)
    email = models.CharField(max_length=100)
    password = models.TextField()

    def __str__(self):
        return self.fullname

views.py

@api_view(['GET'])
def practiceAnswer_filter(request):
    if request.method == 'GET':
        practiceAnswers = PracticeAnswer.objects.all()
        
        practice_id = request.GET.get('practice_id', None)
        if practice_id is not None:
            practiceAnswer_filtered = practiceAnswers.filter(practice_id__practice_id__icontains=practice_id)
            practiceAnswer_list = list(practiceAnswer_filtered)
            shuffle(practiceAnswer_list)
            practiceAnswer_shuffled = practiceAnswer_list[:5]
            def sort_list(e):
                return e.pk            
            practiceAnswer_shuffled.sort(key=sort_list)          
       
        practiceAnswers_serializer = PracticeAnswerSerializerFilter(practiceAnswer_shuffled, many=True)
        return JsonResponse(practiceAnswers_serializer.data, safe=False)

@api_view(['GET'])
def practice_filter(request):
    if request.method == 'GET':
        exercises = Practice.objects.all()
        
        user = request.GET.get('user', None)
        if user is not None:
            practice_filtered = exercises.filter(user__user_id__icontains=user)

        exercises_serializer = PracticeSerializer(practice_filtered, many=True)
        return JsonResponse(exercises_serializer.data, safe=False)

У меня есть данные ответа на практику, основанные на практике с id 127. В этом практическом ответе есть 3 вопроса с 3 ответами на каждый вопрос. Есть 2 правильных ответа и 1 неправильный ответ. Данные уже доступны, когда все вопросы отвечены.

localhost:8080/api/practice-answer-filter?practice_id=127

[
  {
    practice_answer_id: 299,
    practice_answer: "20",
    practice: 127,
    question: {
      question_id: 51,
      question: "10 + 10 = ?",
      question_answer: "20",
      multiple_choice_a: "10",
      multiple_choice_b: "20",
      multiple_choice_c: "30",
    }
  },
  {
    practice_answer_id: 300,
    practice_answer: "50",
    practice: 127,
    question: {
      question_id: 69,
      question: "30 + 30 = ?",
      question_answer: "60",
      multiple_choice_a: "40",
      multiple_choice_b: "50",
      multiple_choice_c: "60",
    }
  },
  {
    practice_answer_id: 301,
    practice_answer: "140",
    practice: 127,
    question: {
      question_id: 48,
      question: "70 + 70 = ?",
      question_answer: "140",
      multiple_choice_a: "140",
      multiple_choice_b: "150",
      multiple_choice_c: "160",

    }
  },
]

Я хочу, чтобы когда все вопросы отвечены и пользователь нажимает кнопку завершения, то 3 данных вопросов и ответов отправляются на сервер и обрабатываются непосредственно средствами если ответ на вопрос правильный то он стоит 5 если неправильный стоит 0 и отображает количество правильных ответов. после того как данные обработаны или подсчитаны, результаты сразу обновляются localhost:8080/api/practice-filter?user=48

В настоящее время у меня уже есть данные по практике, которые отфильтрованы пользователем с id 48, чьи оценки и правильные значения все еще пусты.

localhost:8080/api/practice-filter?user=48

[
  {
    practice_id: 127,
    user: 48,
    score: null,
    correct: null,
  }
]

Конечный результат, который я хочу получить :

localhost:8080/api/practice-filter?user=48

[
  {
    practice_id: 127,
    user: 48,
    score: 10,
    correct: 2,
  }
]

При обращении к localhost:8080/api/practice-filter?user=48 я хочу получить результаты вычислений score и correct из localhost:8080/api/practice-answer-filter?practice_id=127, где score 10 получается из 2 ответов, каждый правильный из которых получает 5 баллов, а correct 2 получается из 2 правильных ответов.

Как обработать ответ практики, когда пользователь нажимает кнопку завершения, то данные 3 вопросов и ответов отправляются на сервер и обрабатываются непосредственно средствами если ответ на вопрос правильный то он стоит 5 если неправильный стоит 0 и отображается количество правильных ответов? Затем результаты немедленно обновляются до данных практики, которые еще пустые, так что когда пользователь открывает данные практики, данные практики уже доступны. Должен ли я создать новый function в views.py или что мне делать? У меня нет идей, как это сделать.

Я все еще новичок и нуждаюсь в большом количестве рекомендаций. Пожалуйста, помогите. Спасибо.

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