]> git.parisson.com Git - django_quiz.git/commitdiff
big commit, added a new method to questions to return guess as string, added sitting...
authortomwalker <tomwalker0472@gmail.com>
Fri, 25 Jul 2014 17:20:46 +0000 (18:20 +0100)
committertomwalker <tomwalker0472@gmail.com>
Fri, 25 Jul 2014 17:20:46 +0000 (18:20 +0100)
essay/models.py
essay/tests.py
multichoice/models.py
multichoice/tests.py
quiz/forms.py
quiz/models.py
quiz/templates/question.html
quiz/tests.py
quiz/views.py
true_false/models.py
true_false/tests.py

index 39f29a0a7703828c21491b76bcb5f3f2fd50a0ff..1a077c943688f557e052ebda6f3870dbd55b7cca 100644 (file)
@@ -12,5 +12,8 @@ class Essay_Question(Question):
     def get_answers_list(self):
         return False
 
+    def answer_choice_to_string(self, guess):
+        return str(guess)
+
     class Meta:
         verbose_name = "Essay style question"
index 21f6258d46b909e5ab10b1b260ceacaacd0f52a1..6f56d07a4508076a4e1c32b27b7b3be57ac336ae 100644 (file)
@@ -12,3 +12,7 @@ class TestEssayQuestionModel(TestCase):
         self.assertEqual(self.essay.check_if_correct(), False)
         self.assertEqual(self.essay.get_answers(), False)
         self.assertEqual(self.essay.get_answers_list(), False)
+
+    def test_returns_guess(self):
+        guess = "To be or not to be"
+        self.assertEqual(self.essay.answer_choice_to_string(guess), guess)
index 54ccb53b4062da3211b670b36e7a699d24f84d6f..ad5ee7250c71ec4fa1f00d4f7ca7cb2d4de6c82a 100644 (file)
@@ -19,6 +19,9 @@ class MCQuestion(Question):
         return [(answer.id, answer.content) for answer in
                 Answer.objects.filter(question=self)]
 
+    def answer_choice_to_string(self, guess):
+        return Answer.objects.get(id=guess).content
+
     class Meta:
         verbose_name = "Multiple Choice Question"
         verbose_name_plural = "Multiple Choice Questions"
index fd5eb6d274a26c6d08423400d0e142c56fc371b2..51718826720250857a2b3ab20daf4269873a2b39 100644 (file)
@@ -32,3 +32,5 @@ class TestMCQuestionModel(TestCase):
         self.assertEqual(self.q.check_if_correct(123), False)
         self.assertEqual(self.q.check_if_correct(456), True)
         self.assertEqual(answers_by_method.count(), 2)
+        self.assertEqual(self.q.answer_choice_to_string(123),
+                         self.answer1.content)
index 5bd8550ee2cfa9259373b9b8c42cc0005bab6a12..bb74388fbc6e972a5330f1ada1386b11d8483271 100644 (file)
@@ -1,5 +1,5 @@
 from django import forms
-from django.forms.widgets import RadioSelect
+from django.forms.widgets import RadioSelect, Textarea
 
 
 class QuestionForm(forms.Form):
@@ -8,3 +8,9 @@ class QuestionForm(forms.Form):
         choice_list = [x for x in question.get_answers_list()]
         self.fields["answers"] = forms.ChoiceField(choices=choice_list,
                                                    widget=RadioSelect)
+
+
+class EssayForm(forms.Form):
+    def __init__(self, question, *args, **kwargs):
+        super(EssayForm, self).__init__(*args, **kwargs)
+        self.fields["answers"] = forms.CharField(widget=Textarea)
index 6ffea6ccc05e2137c1c0e43d1fb5ee72ddb0a31f..93e0b05d6a3111f01194569dea7160bf9d6bbe92 100644 (file)
@@ -296,7 +296,8 @@ class SittingManager(models.Manager):
                                   question_list=questions,
                                   incorrect_questions="",
                                   current_score=0,
-                                  complete=False)
+                                  complete=False,
+                                  user_answers='{}')
         new_sitting.save()
         return new_sitting
 
@@ -421,6 +422,15 @@ class Sitting(models.Model):
         current[question.id] = guess
         self.user_answers = json.dumps(current)
 
+    def questions_with_user_answers(self):
+        output = {}
+        user_answers = json.loads(self.user_answers)
+        questions = self.quiz.question_set.all().select_subclasses()
+        for question in questions:
+            output[question] = user_answers[unicode(question.id)]
+
+        return output
+
 
 class Question(models.Model):
     """
index d4327f3db307b3bc6ffed3736fd8ea4101ffeeed..6890965670c54eec01335dc429fa47dbc45e628b 100644 (file)
 
   <ul class="list-group">
 
-       {% for answer in form.answers %}
-         <li class="list-group-item">
-         {{ answer }}
-         </li>
-       {% endfor %}
+       {{ form }}
+       <!--  {% for answer in form.answers %} -->
+<!--     <li class="list-group-item">  -->
+       <!--  {{ answer }} -->
+<!--     </li> -->
+<!--   {% endfor %} -->
 
   </ul>
   <input type="submit" value="Check" class="btn btn-large btn-block btn-warning" >
index e4f34868fea48ed98bda00d6e15ddf92e2863758..195c5e3c9e08337ef518cf626462ea21b1748485 100644 (file)
@@ -181,10 +181,20 @@ class TestSitting(TestCase):
                                                    content='squawk')
         self.question1.quiz.add(self.quiz1)
 
+        self.answer1 = Answer.objects.create(id=123,
+                                             question=self.question1,
+                                             content='bing',
+                                             correct=False)
+
         self.question2 = MCQuestion.objects.create(id=2,
                                                    content='squeek')
         self.question2.quiz.add(self.quiz1)
 
+        self.answer2 = Answer.objects.create(id=456,
+                                             question=self.question2,
+                                             content='bong',
+                                             correct=True)
+
         self.user = User.objects.create_user(username='jacob',
                                              email='jacob@jacob.com',
                                              password='top_secret')
@@ -245,15 +255,19 @@ class TestSitting(TestCase):
         self.assertEqual(self.sitting.complete, True)
 
     def test_add_user_answer(self):
-        self.answer1 = Answer.objects.create(id=123,
-                                             question=self.question1,
-                                             content='bing',
-                                             correct=False)
         guess = '123'
         self.sitting.add_user_answer(self.question1, guess)
 
         self.assertIn('123', self.sitting.user_answers)
 
+    def test_return_questions_with_answers(self):
+        self.sitting.add_user_answer(self.question1, '123')
+        self.sitting.add_user_answer(self.question2, '456')
+
+        user_answers = self.sitting.questions_with_user_answers()
+        self.assertEqual('123', user_answers[self.question1])
+        self.assertEqual('456', user_answers[self.question2])
+
 
 '''
 Tests relating to views
index 5ed13d4584211ebeef17245f2ad39f6cdac811e9..fafc504b9e047bc046957ddaf6f7bd30157dde92 100644 (file)
@@ -6,9 +6,9 @@ from django.template import RequestContext
 from django.utils.decorators import method_decorator
 from django.views.generic import DetailView, ListView, TemplateView, FormView
 
-from .forms import QuestionForm
+from .forms import QuestionForm, EssayForm
 from .models import Quiz, Category, Progress, Sitting, Question
-
+from Essay_Question.models import Essay_Question
 
 class QuizMarkerMixin(object):
     @method_decorator(login_required)
@@ -120,15 +120,20 @@ class QuizTake(FormView):
         if self.sitting is False:
             return render(request, 'single_complete.html')
 
-        return super(QuizTake, self).dispatch(self.request, *args, **kwargs)
-
-    def get_form_kwargs(self):
-        kwargs = super(QuizTake, self).get_form_kwargs()
         if self.request.user.is_authenticated() is True:
             self.question = self.sitting.get_first_question()
         else:
             self.question = anon_next_question(self)
 
+        return super(QuizTake, self).dispatch(self.request, *args, **kwargs)
+
+    def get_form(self, form_class):
+        if self.question.__class__ is Essay_Question:
+            form_class = EssayForm
+        return form_class(**self.get_form_kwargs())
+
+    def get_form_kwargs(self):
+        kwargs = super(QuizTake, self).get_form_kwargs()
         return dict(kwargs, question=self.question)
 
     def form_valid(self, form):
index 8f594cae5e1b9e9b5b8cd28e5d0a9acad485fda5..bc51ac83abb9a459be31020f1933e691232ada6f 100644 (file)
@@ -31,6 +31,9 @@ class TF_Question(Question):
     def get_answers_list(self):
         return [(True, True), (False, False)]
 
+    def answer_choice_to_string(self, guess):
+        return str(guess)
+
     class Meta:
         verbose_name = "True/False Question"
         verbose_name_plural = "True/False Questions"
index ca08bba197e8ea2d12e64f251262067b7d6daa04..46d02f12f049c51e3790eb10c9e513b23a6b5c8d 100644 (file)
@@ -29,3 +29,4 @@ class TestTrueFalseQuestionModel(TestCase):
                            'content': 'True'},
                           {'correct': False,
                            'content': 'False'}])
+        self.assertEqual(self.red.answer_choice_to_string('True'), 'True')