def submit(request): if not 'id' in request.POST: return HttpResponse('{"Error": "No ID supplied."}', content_type='application/json', status=400) if not 'result_data' in request.POST: return HttpResponse('{"Error": "No result data supplied."}', content_type='application/json', status=400) try: subject = Subject.objects.filter(subject_id=request.POST['id']).all()[0] except IndexError: return HttpResponse('{"Error": "Unknown id."}', content_type='application/json') result_data = json.loads(request.POST['result_data']) try: task = Task.objects.filter(pk=result_data['task_id']).all()[0] except IndexError: return HttpResponse('{"Error": "Unknown task."}', content_type='application/json') result = Result(subject=subject, task=task) result.first_card_flipped = result_data['1'] result.second_card_flipped = result_data['2'] result.third_card_flipped = result_data['3'] result.fourth_card_flipped = result_data['4'] result.time = result_data['time'] result.save() if subject.results.count() >= min(AbstractTask.objects.count(), ConcreteTask.objects.count()): return HttpResponse('{"Finished": "Tasks completed."}', content_type='application/json') if subject.is_abstract_group(): task = AbstractTask.objects.all()[subject.results.count()] else: task = ConcreteTask.objects.all()[subject.results.count()] return HttpResponse(json.dumps({ 'task_id': task.pk, 'description': task.description, 1: { 'card_id': task.first_card }, 2: { 'card_id': task.second_card }, 3: { 'card_id': task.third_card }, 4: { 'card_id': task.fourth_card }, 'story': task.story, 'task_number': min(AbstractTask.objects.count(), ConcreteTask.objects.count()), 'progress': subject.results.count() }), content_type='application/json')