from django.http import HttpResponseBadRequest, JsonResponse from django.db import transaction from judge.models import VolunteerProblemVote, Problem, ProblemType def vote_problem(request): if not request.user or not request.user.has_perm("judge.suggest_problem_changes"): return HttpResponseBadRequest() if not request.method == "POST": return HttpResponseBadRequest() try: types_id = request.POST.getlist("types[]") types = ProblemType.objects.filter(id__in=types_id) problem = Problem.objects.get(code=request.POST["problem"]) knowledge_points = request.POST["knowledge_points"] thinking_points = request.POST["thinking_points"] feedback = request.POST["feedback"] except Exception as e: return HttpResponseBadRequest() with transaction.atomic(): vote, _ = VolunteerProblemVote.objects.get_or_create( voter=request.profile, problem=problem, defaults={"knowledge_points": 0, "thinking_points": 0}, ) vote.knowledge_points = knowledge_points vote.thinking_points = thinking_points vote.feedback = feedback vote.types.set(types) vote.save() return JsonResponse({})