首页 > 解决方案 > 如何直接在服务器上处理练习答案并使用 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 个正确答案的结果。correctlocalhost:8080/api/practice-answer-filter?practice_id=127score 10correct 2

当用户按下完成按钮时如何处理练习答案然后将3个问答数据发送到服务器并直接处理,如果问题的答案正确则价值5如果错误价值0并显示正确答案的数量?然后立即将结果更新为仍然为空的练习数据,这样当用户打开练习数据时,练习数据已经可用。我必须创建一个新functionviews.py或我应该怎么做?我不知道这样做。

我仍然是初学者,需要很多指导。请帮忙。谢谢你。

标签: pythondjangodjango-modelsdjango-rest-frameworkdjango-views

解决方案


推荐阅读