Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为django测验应用程序编写答疑页面视图?_Python_Django_Web_Django Models_Django Views - Fatal编程技术网

Python 如何为django测验应用程序编写答疑页面视图?

Python 如何为django测验应用程序编写答疑页面视图?,python,django,web,django-models,django-views,Python,Django,Web,Django Models,Django Views,我正在django编写一个mcq应用程序,我是一个完全的初学者。我有个问题。我被困在写答题纸上了。每次用户参加测试时,我想创建一个新的坐姿对象,我想显示测验的问题选择表,并使用每个问题的选择填充坐姿对象的用户回答文本字段,所有这些都在同一个视图中。我该怎么做 models.py from django.db import models from django.utils import timezone from django.contrib.auth.models import User

我正在django编写一个mcq应用程序,我是一个完全的初学者。我有个问题。我被困在写答题纸上了。每次用户参加测试时,我想创建一个新的坐姿对象,我想显示测验的问题选择表,并使用每个问题的选择填充坐姿对象的用户回答文本字段,所有这些都在同一个视图中。我该怎么做

models.py

 from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User 

class Test(models.Model):
    title = models.CharField(max_length=100)
    date_posted=models.DateTimeField(default=timezone.now)
    creator=models.ForeignKey(User,on_delete=models.CASCADE)
    total_marks=models.IntegerField(default=0)

    def get_total_marks(self):
        for question in self.question_set.all():
            self.total_marks+=question.Marks
        return self.total_marks
    def get_correct_answer_list(self):
        correct_answers=[]

        for question in self.question_set.all():
            for choice in question.choice_set.all():
                if choice.is_correct:
                    correct_answers.append(choice)
        return correct_answers
    def __str__(self):
        return self.title

class Question(models.Model):
    test=models.ForeignKey(Test,on_delete=models.CASCADE)
    question_text = models.CharField(max_length=200)
    Marks = models.IntegerField(default=2)

    def get_answer_list(self):
        answer_list=[]

        for choice in enumerate(self.choice_set.all()):
            answer_list.append(choice)
        return answer_list
    def __str__(self):
        return self.question_text
 
class Choice(models.Model):
    question=models.ForeignKey(Question,on_delete=models.CASCADE)
    choice_text=models.CharField(max_length=200)
    is_correct=models.BooleanField()

    def __str__(self):
        return self.choice_text

class Sitting(models.Model):
    student=models.ForeignKey(User,on_delete=models.CASCADE)
    test=models.ForeignKey(Test,on_delete=models.CASCADE)
    score=models.IntegerField(default=0)
    taken_time=models.DateTimeField(default=timezone.now)
    user_answers=models.TextField(blank=True,default='')

    def calculate_score(self):
        user_answers_list=self.user_answers.split(',')
        correct_answers_list=self.test.get_correct_answer_list()
        for (answer,correct) in zip(user_answers_list,correct_answers_list):
            if answer==correct.choice_text:
                self.score+=correct.question.Marks
        return self.score
    

    def get_absolute_url(self):
        return "/%s/result/"%self.id

    def __str__(self):
        return self.student.username+' took '+self.test.title
views.py

from django.shortcuts import render,get_object_or_404
from django.views import generic
from django.urls import reverse
from django.http import HttpResponseRedirect
from django import forms
from .models import Test,Question,Choice,Sitting
from .forms import TestSitForm,QuestionForm
class IndexView(generic.ListView):
    template_name='quiz/index.html'
    context_object_name='latest_tests_list'

    def get_queryset(self):

        return Test.objects.order_by('date_posted')

class AnswerView(generic.edit.CreateView):
    form_class=TestSitForm
    model=Sitting
    
    
        
    def get_success_url(self):
        return reverse('quiz:test-result',kwargs={'pk':self.object.pk})

    def form_valid(self,form):

        form.instance.student=self.request.user
        form.instance.test=Test.objects.get(pk=self.kwargs['pk'])
        
        return super().form_valid(form)

    def get_context_data(self,**kwargs):
        context=super(AnswerView,self).get_context_data(**kwargs)
        context["test"]=Test.objects.get(pk=self.kwargs["pk"])
        
        for question in context["test"].question_set.all():
            
            context["question_form"+str(question.pk)]=QuestionForm(question)

        return context  
    template_name='quiz/answer.html'


class ResultView(generic.DetailView):
    model=Sitting
    
    template_name='quiz/result.html'