]> git.parisson.com Git - django_quiz.git/commitdiff
finally getting round to properly implementing forms with CBVs for the main portion...
authorTom Walker <tomwalker0472@gmail.com>
Tue, 15 Jul 2014 21:05:11 +0000 (22:05 +0100)
committerTom Walker <tomwalker0472@gmail.com>
Tue, 15 Jul 2014 21:05:11 +0000 (22:05 +0100)
quiz/forms.py
quiz/templates/question.html
quiz/tests.py
quiz/urls.py
quiz/views.py

index 9afb3cfc22b97390c18dc7a4c4ebd9f6c563b03b..18fd282b6a621f8aacc5fa7edc9224dbfcb96896 100644 (file)
@@ -1,2 +1,11 @@
 from django import forms
-from django.forms.models import inlineformset_factory
+from django.forms.widgets import RadioSelect
+
+
+class QuestionForm(forms.Form):
+    def __init__(self, question, *args, **kwargs):
+        super(QuestionForm, self).__init__(*args, **kwargs)
+        self.fields["answers"] = forms.ModelChoiceField(
+            queryset=question.get_answers(),
+            empty_label=None,
+            widget=RadioSelect)
index 68b7ac95a4681d6d3b30f70703c975a21251298e..eac58dbce474e6c9e7d2f684855d7bbd87e4042c 100644 (file)
@@ -51,7 +51,7 @@
 
 <p class="lead">{{ question.content }}</p>
 
-<form action="" method="get">
+<form action="" method="get">{% csrf_token %}
   <input type=hidden name="question_id" value="{{ question.id }}">
 
   <table class="table table-hover table-bordered" id="answerchoice">
index 4e8706ea1ce254d3ea4bd326fbc63c9cf6df0f2d..eb7963e66fb04a3fe764ebff8693f5fa13e3818c 100644 (file)
@@ -315,7 +315,7 @@ class TestNonQuestionViews(TestCase):
         self.assertEqual((score, possible), (0.5, 2))
 
         score, possible = anon_session_score(request)
-        self.assertEqual((score, possible), (0, 0))
+        self.assertEqual((score, possible), (0.5, 2))
 
 
 class TestQuestionViewsAnon(TestCase):
index f56fb501851da2ed622475df6d012cdb9f23af68..de6e2311c815563d7065ae7773a620eb545665c5 100644 (file)
@@ -1,7 +1,7 @@
 from django.conf.urls import patterns, url
 
 from .views import QuizListView, CategoriesListView,\
-    ViewQuizListByCategory, QuizUserProgressView, QuizDetailView
+    ViewQuizListByCategory, QuizUserProgressView, QuizDetailView, QuizTake
 
 
 urlpatterns = patterns('quiz.views',
@@ -30,4 +30,8 @@ urlpatterns = patterns('quiz.views',
                        url(regex=r'^(?P<quiz_name>[\w-]+)/take/$',
                            view='quiz_take',
                            name='quiz_question'),
+
+                       url(regex=r'^x/(?P<quiz_name>[\w-]+)/take/$',
+                           view=QuizTake.as_view(),
+                           name='quiz_question'),
                        )
index 9975156d38591666738f07e9e49c2d777b57c464..0a92b354ab4142ac352659e6826463bb049e42d4 100644 (file)
@@ -4,8 +4,9 @@ from django.contrib.auth.decorators import login_required
 from django.shortcuts import get_object_or_404, render, render_to_response
 from django.template import RequestContext
 from django.utils.decorators import method_decorator
-from django.views.generic import DetailView, ListView, TemplateView
+from django.views.generic import DetailView, ListView, TemplateView, FormView
 
+from .forms import QuestionForm
 from .models import Quiz, Category, Progress, Sitting, Question
 
 
@@ -292,3 +293,54 @@ def final_result_anon(request, quiz, previous):
                                    'session': session_score,
                                    'possible': session_possible},
                                   context_instance=RequestContext(request))
+
+
+def form_test(request, quiz_name):
+    quiz = Quiz.objects.get(url=quiz_name.lower())
+    try:
+        sitting = Sitting.objects.get(user=request.user,
+                                      quiz=quiz,
+                                      complete=False)
+
+    except Sitting.DoesNotExist:
+        sitting = Sitting.objects.new_sitting(request.user, quiz)
+
+    except Sitting.MultipleObjectsReturned:
+        sitting = Sitting.objects.filter(user=request.user,
+                                         quiz=quiz,
+                                         complete=False)[0]
+
+    question = sitting.get_first_question()
+    form = QuestionForm(question=question)
+    return render_to_response('q_test.html', {'form': form,
+                                              'question': question})
+
+
+class QuizTake(FormView):
+    form_class = QuestionForm
+    template_name = 'q_test.html'
+
+    def get_context_data(self, **kwargs):
+        context = super(QuizTake, self).get_context_data(**kwargs)
+        context['question'] = self.question
+        return context
+
+    def get_form_kwargs(self):
+        kwargs = super(QuizTake, self).get_form_kwargs()
+        quiz = get_object_or_404(Quiz, url=self.kwargs['quiz_name'])
+
+        try:
+            sitting = Sitting.objects.get(user=self.request.user,
+                                          quiz=quiz,
+                                          complete=False)
+
+        except Sitting.DoesNotExist:
+            sitting = Sitting.objects.new_sitting(self.request.user, quiz)
+
+        except Sitting.MultipleObjectsReturned:
+            sitting = Sitting.objects.filter(user=self.request.user,
+                                             quiz=quiz,
+                                             complete=False)[0]
+
+        self.question = sitting.get_first_question()
+        return dict(kwargs, question=self.question)