def course_preview(request, semester_id, course_id): semester = get_object_or_404(Semester, id=semester_id) course = get_object_or_404(Course, id=course_id) # build forms forms = SortedDict() for questionnaire, assignment in questionnaires_and_assignments(course): form = QuestionsForm(request.POST or None, assignment=assignment, questionnaire=questionnaire) forms[(assignment, questionnaire)] = form return render_to_response("fsr_course_preview.html", dict(forms=forms.values(), course=course, semester=semester), context_instance=RequestContext(request))
def vote(request, course_id): # retrieve course and make sure that the user is allowed to vote course = get_object_or_404(Course, id=course_id) if not course.can_user_vote(request.user): raise PermissionDenied # build forms forms = SortedDict() for questionnaire, assignment in questionnaires_and_assignments(course): form = QuestionsForm(request.POST or None, assignment=assignment, questionnaire=questionnaire) forms[(assignment, questionnaire)] = form if all(form.is_valid() for form in forms.values()): # begin vote operation with transaction.commit_on_success(): for (assignment, questionnaire), form in forms.items(): for question in questionnaire.question_set.all(): identifier = make_form_identifier(assignment, questionnaire, question) value = form.cleaned_data.get(identifier) if type(value) in [str, unicode]: value = value.strip() # store the answer if one was given if value: question.answer_class.objects.create( assignment=assignment, question=question, answer=value) # remember that the user voted already course.voters.add(request.user) messages.add_message(request, messages.INFO, _("Your vote was recorded.")) return redirect('evap.student.views.index') else: return render_to_response( "student_vote.html", dict(forms=forms.values(), course=course), context_instance=RequestContext(request))