def post(self, request, pid): global lang problem = get_object_or_404(Problem, pk=pid) if 'lang_select' in request.POST: form2 = self.form_class2(request.POST) if form2.is_valid(): lang = form2.cleaned_lang() form1 = self.form_class1(lang, None) form2 = self.form_class2(None) return render( request, self.template_name, { 'problem': problem, 'form1': form1, 'form2': form2, 'lang': lang }) else: form1 = self.form_class1(lang, None) form2 = self.form_class2(None) return render( request, self.template_name, { 'problem': problem, 'form1': form1, 'form2': form2, 'lang': lang }) else: form1 = self.form_class1(data=request.POST, lang=lang) if not form1.is_valid(): form1 = self.form_class1(lang, None) form2 = self.form_class2(None) return render(request, self.template_name, { 'form1': form1, 'form2': form2, 'lang': lang }) content = ContentFile(request.POST['code']) submission = Submission(user=request.user, lang=lang, problem=problem) submission.code.save('x' + self.lang_map[lang], content, save=False) r = submission.compile() # Compilation error if r != 200: submission.code.delete(save=False) form2 = self.form_class2(None) return render(request, self.template_name, { 'form1': form1, 'form2': form2, 'lang': lang, 'errors': r }) submission.save() result = problem.test(submission) result.status = status[result.status] result.toe = '{:.2f}'.format(result.toe) form2 = self.form_class2(None) return render( request, self.template_name, { 'problem': problem, 'form1': form1, 'form2': form2, 'lang': lang, 'result': result })