如何在Django视图中比较2个不同表的列?

戈皮·钱德N

我有2个表的问答。2个表有答案栏。我想将问题表答案列与答案表答案列进行比较,并使用会话显示结果。请指导我解决这个问题。

我将答案和用户答案的​​问题保存到数据库中。

def questions(request):
    if request.method == 'POST':
        form = QuestionsForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, 'saved successfully')
            return HttpResponseRedirect('questions')
        else:
            messages.error(request, 'not saved')
            return HttpResponseRedirect('questions')
    else:
        form = QuestionsForm()
    return render(request, 'questions.html', {'form':form})


def answer(request):
    if request.method=="POST":
        question_ans = request.POST.get('answer', '')
        question = request.POST.get('question', '')
        print(f'ans: {question_ans}, ques: {question}', flush=True)
        ques = Questions.objects.get(question=question)
        if ques is not None:
            question_ans1 = Answer(answer=question_ans, question=ques)
            question_ans1.save()
            return render(request, 'answer.html')
        else:
            return render(request, 'report.html')
    else:
        return render(request, 'report.html')


def result(request):
    if request.method=="POST":
        user_ans = Answers.objects.get(answer=answer)
        ques_ans = Questions.objects.get(answer=answer)
        result = 0
        if ques_ans == user_ans:
            reslut +=1
        else:
            result -=0.33
        return render(request, 'result.html', {'result': result})
    else:
        return render(request, 'result.html')

model.py:

class Questions(models.Model):
        qs_no = models.IntegerField(default=None)
        question = models.TextField(max_length=500)
        option_a = models.CharField(max_length=100)
        option_b = models.CharField(max_length=100)
        option_c = models.CharField(max_length=100)
        option_d = models.CharField(max_length=100)
        ans = models.CharField(null=True, max_length=50)



class Answer(models.Model):
    question = models.ForeignKey(Questions, on_delete=models.CASCADE, default=None)
    answer = models.CharField(max_length=50, default=None)


    def __str__(self):
        return self.answer
安德烈·马斯洛夫(Andrey Maslov)

如果您想计算所有问题的所有答案,可以这样做

def result(request):
    context = {}  
    if request.method=="POST":
        result = 0
        for answer in Answer.objects.all():
            if answer.answer == answer.question.ans:
                result += 1
            else:
                result -= 0.33
        context.update({
            'result': result,
        })
    return render(request, 'result.html', context)

或者您可以对其进行优化)这样的查询

            for answer in Answer.objects.values("answer", "question__ans"):
                if answer["answer"] == answer["question__ans"]:
                    result += 1
                else:
                    result -= 0.33

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章