def submission(request, challenge_id): if request.user.id == None: return HttpResponse('Please log in.') if request.method == 'POST': try: requestpost = request.POST['choice'] except: return HttpResponse('Please select a language.') c = Challenge.objects.get(pk=challenge_id) input = request.POST.get('your_solution', None) user = User.objects.get(pk=request.user.id) s = Submission() s.challenge = c l = Language.objects.get(pk=request.POST['choice']) s.language = l s.user = user s.timestamp = datetime.datetime.now() if c.ans == input: # check if never solved solve = Submission.objects.filter(user__id=request.user.id).filter( challenge__id=challenge_id).filter(result='AC') if not solve.exists(): challengeTopics = ChallengeTopic.objects.all().filter( challenge_id=c.id) for ct in challengeTopics: t = Topic.objects.get(pk=ct.topic_id) tr, created = TopicRating.objects.get_or_create( topic=t, user=user, defaults={ 'rating': 0, 'timestamp': datetime.datetime.now(), }) if created: tr.rating = 0 tr.rating += c.difficulty * ct.weight tr.save() if not solve.filter(language__id=l.id).exists(): lr, created = LanguageRating.objects.get_or_create( language=l, user=user, defaults={ 'rating': 0, 'timestamp': datetime.datetime.now() }) if created: lr.rating = 0 lr.rating += c.difficulty lr.save() s.result = 'AC' s.save() return redirect('correct/') else: s.result = 'WA' s.save() return HttpResponse('You are wrong!') else: return HttpResponse("Something's wrong.")