python - 如何直接在服务器上处理练习答案并使用 Django 在练习数据上立即更新结果
问题描述
我想直接在服务器上处理练习答案,结果立即在练习数据上更新,所以当用户打开练习数据时,练习数据值已经可用。
模型.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
视图.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个错误答案。回答完所有问题后,数据就已经可用。
本地主机: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 的用户过滤的练习数据,其分数和正确值仍然为空。
本地主机:8080/api/practice-filter?user=48
[
{
practice_id: 127,
user: 48,
score: null,
correct: null,
}
]
我想要的最终结果:
本地主机:8080/api/practice-filter?user=48
[
{
practice_id: 127,
user: 48,
score: 10,
correct: 2,
}
]
访问 时localhost:8080/api/practice-filter?user=48
,我想从中获取计算结果score
,其中是从 2 个答案中获得的,每个正确的答案得到 5 分,总共有 2 个正确答案的结果。correct
localhost:8080/api/practice-answer-filter?practice_id=127
score 10
correct 2
当用户按下完成按钮时如何处理练习答案然后将3个问答数据发送到服务器并直接处理,如果问题的答案正确则价值5如果错误价值0并显示正确答案的数量?然后立即将结果更新为仍然为空的练习数据,这样当用户打开练习数据时,练习数据已经可用。我必须创建一个新function
的views.py
或我应该怎么做?我不知道这样做。
我仍然是初学者,需要很多指导。请帮忙。谢谢你。