Как обрабатывать ответы на вопросы практики прямо на сервере, а результаты немедленно обновлять на данных о практике с помощью 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
или что мне делать? У меня нет идей, как это сделать.
Я все еще новичок и нуждаюсь в большом количестве рекомендаций. Пожалуйста, помогите. Спасибо.