add message and comment
This commit is contained in:
@@ -31,7 +31,11 @@ class ProblemIOMode(Choices):
|
||||
|
||||
|
||||
def _default_io_mode():
|
||||
return {"io_mode": ProblemIOMode.standard, "input": "input.txt", "output": "output.txt"}
|
||||
return {
|
||||
"io_mode": ProblemIOMode.standard,
|
||||
"input": "input.txt",
|
||||
"output": "output.txt",
|
||||
}
|
||||
|
||||
|
||||
class Problem(models.Model):
|
||||
|
||||
@@ -3,8 +3,14 @@ from django.db.models import Q, Count
|
||||
from utils.api import APIView
|
||||
from account.decorators import check_contest_permission
|
||||
from ..models import ProblemTag, Problem, ProblemRuleType
|
||||
from ..serializers import ProblemSerializer, TagSerializer, ProblemSafeSerializer, ProblemListSerializer
|
||||
from ..serializers import (
|
||||
ProblemSerializer,
|
||||
TagSerializer,
|
||||
ProblemSafeSerializer,
|
||||
ProblemListSerializer,
|
||||
)
|
||||
from contest.models import ContestRuleType
|
||||
from submission.models import JudgeStatus
|
||||
|
||||
|
||||
class ProblemTagAPI(APIView):
|
||||
@@ -38,20 +44,27 @@ class ProblemAPI(APIView):
|
||||
if results is not None:
|
||||
problems = results
|
||||
else:
|
||||
problems = [queryset_values, ]
|
||||
problems = [
|
||||
queryset_values,
|
||||
]
|
||||
for problem in problems:
|
||||
if problem["rule_type"] == ProblemRuleType.ACM:
|
||||
problem["my_status"] = acm_problems_status.get(str(problem["id"]), {}).get("status")
|
||||
problem["my_status"] = acm_problems_status.get(
|
||||
str(problem["id"]), {}
|
||||
).get("status")
|
||||
else:
|
||||
problem["my_status"] = oi_problems_status.get(str(problem["id"]), {}).get("status")
|
||||
problem["my_status"] = oi_problems_status.get(
|
||||
str(problem["id"]), {}
|
||||
).get("status")
|
||||
|
||||
def get(self, request):
|
||||
# 问题详情页
|
||||
problem_id = request.GET.get("problem_id")
|
||||
if problem_id:
|
||||
try:
|
||||
problem = Problem.objects.select_related("created_by") \
|
||||
.get(_id=problem_id, contest_id__isnull=True, visible=True)
|
||||
problem = Problem.objects.select_related("created_by").get(
|
||||
_id=problem_id, contest_id__isnull=True, visible=True
|
||||
)
|
||||
problem_data = ProblemSerializer(problem).data
|
||||
self._add_problem_status(request, problem_data)
|
||||
return self.success(problem_data)
|
||||
@@ -62,7 +75,11 @@ class ProblemAPI(APIView):
|
||||
if not limit:
|
||||
return self.error("Limit is needed")
|
||||
|
||||
problems = Problem.objects.select_related("created_by").filter(contest_id__isnull=True, visible=True).order_by("-create_time")
|
||||
problems = (
|
||||
Problem.objects.select_related("created_by")
|
||||
.filter(contest_id__isnull=True, visible=True)
|
||||
.order_by("-create_time")
|
||||
)
|
||||
# 按照标签筛选
|
||||
tag_text = request.GET.get("tag")
|
||||
if tag_text:
|
||||
@@ -71,7 +88,9 @@ class ProblemAPI(APIView):
|
||||
# 搜索的情况
|
||||
keyword = request.GET.get("keyword", "").strip()
|
||||
if keyword:
|
||||
problems = problems.filter(Q(title__icontains=keyword) | Q(_id__icontains=keyword))
|
||||
problems = problems.filter(
|
||||
Q(title__icontains=keyword) | Q(_id__icontains=keyword)
|
||||
)
|
||||
|
||||
# 难度筛选
|
||||
difficulty = request.GET.get("difficulty")
|
||||
@@ -88,30 +107,41 @@ class ContestProblemAPI(APIView):
|
||||
if request.user.is_authenticated:
|
||||
profile = request.user.userprofile
|
||||
if self.contest.rule_type == ContestRuleType.ACM:
|
||||
problems_status = profile.acm_problems_status.get("contest_problems", {})
|
||||
problems_status = profile.acm_problems_status.get(
|
||||
"contest_problems", {}
|
||||
)
|
||||
else:
|
||||
problems_status = profile.oi_problems_status.get("contest_problems", {})
|
||||
for problem in queryset_values:
|
||||
problem["my_status"] = problems_status.get(str(problem["id"]), {}).get("status")
|
||||
problem["my_status"] = problems_status.get(str(problem["id"]), {}).get(
|
||||
"status"
|
||||
)
|
||||
|
||||
@check_contest_permission(check_type="problems")
|
||||
def get(self, request):
|
||||
problem_id = request.GET.get("problem_id")
|
||||
if problem_id:
|
||||
try:
|
||||
problem = Problem.objects.select_related("created_by").get(_id=problem_id,
|
||||
contest=self.contest,
|
||||
visible=True)
|
||||
problem = Problem.objects.select_related("created_by").get(
|
||||
_id=problem_id, contest=self.contest, visible=True
|
||||
)
|
||||
except Problem.DoesNotExist:
|
||||
return self.error("Problem does not exist.")
|
||||
if self.contest.problem_details_permission(request.user):
|
||||
problem_data = ProblemSerializer(problem).data
|
||||
self._add_problem_status(request, [problem_data, ])
|
||||
self._add_problem_status(
|
||||
request,
|
||||
[
|
||||
problem_data,
|
||||
],
|
||||
)
|
||||
else:
|
||||
problem_data = ProblemSafeSerializer(problem).data
|
||||
return self.success(problem_data)
|
||||
|
||||
contest_problems = Problem.objects.select_related("created_by").filter(contest=self.contest, visible=True)
|
||||
contest_problems = Problem.objects.select_related("created_by").filter(
|
||||
contest=self.contest, visible=True
|
||||
)
|
||||
if self.contest.problem_details_permission(request.user):
|
||||
data = ProblemListSerializer(contest_problems, many=True).data
|
||||
self._add_problem_status(request, data)
|
||||
|
||||
Reference in New Issue
Block a user