diff --git a/announcement/serializers.py b/announcement/serializers.py index 1edd1d9..2a2f7b0 100644 --- a/announcement/serializers.py +++ b/announcement/serializers.py @@ -18,6 +18,14 @@ class AnnouncementSerializer(serializers.ModelSerializer): fields = "__all__" +class AnnouncementListSerializer(serializers.ModelSerializer): + created_by = UsernameSerializer() + + class Meta: + model = Announcement + exclude = ['content'] + + class EditAnnouncementSerializer(serializers.Serializer): id = serializers.IntegerField() title = serializers.CharField(max_length=64) diff --git a/announcement/views/oj.py b/announcement/views/oj.py index 1176c36..a745ce7 100644 --- a/announcement/views/oj.py +++ b/announcement/views/oj.py @@ -1,10 +1,18 @@ from utils.api import APIView from announcement.models import Announcement -from announcement.serializers import AnnouncementSerializer +from announcement.serializers import AnnouncementSerializer, AnnouncementListSerializer class AnnouncementAPI(APIView): def get(self, request): + id = request.GET.get("id") + if id: + try: + announcement = Announcement.objects.get(id=id, visible=True) + return self.success(AnnouncementSerializer(announcement).data) + except Announcement.DoesNotExist: + return self.error("Announcement does not exist") + announcements = Announcement.objects.filter(visible=True) - return self.success(self.paginate_data(request, announcements, AnnouncementSerializer)) + return self.success(self.paginate_data(request, announcements, AnnouncementListSerializer)) diff --git a/problem/serializers.py b/problem/serializers.py index 099e1f3..3c8ee82 100644 --- a/problem/serializers.py +++ b/problem/serializers.py @@ -116,6 +116,11 @@ class ProblemAdminSerializer(BaseProblemSerializer): model = Problem fields = "__all__" +class ProblemAdminListSerializer(BaseProblemSerializer): + class Meta: + model = Problem + fields = ["_id", "id", "title", "created_by", "visible", "create_time"] + class ProblemSerializer(BaseProblemSerializer): template = serializers.SerializerMethodField("get_public_template") @@ -127,16 +132,10 @@ class ProblemSerializer(BaseProblemSerializer): class ProblemListSerializer(BaseProblemSerializer): - template = serializers.SerializerMethodField("get_public_template") - class Meta: model = Problem - exclude = ("test_case_score", "test_case_id", "visible", "is_public", - "spj_code", "spj_version", "spj_compile_ok", "description", - "input_description", "output_description", "samples", "hint", - "source", "spj", "spj_language", "time_limit", "memory_limit", - "io_mode", "create_time", "languages", "last_update_time", - "total_score", "statistic_info", "share_submission") + fields = ["id", "_id", "title", "submission_number", "accepted_number", + "difficulty", "created_by", "tags"] class ProblemSafeSerializer(BaseProblemSerializer): diff --git a/problem/views/admin.py b/problem/views/admin.py index 22730c9..d099700 100644 --- a/problem/views/admin.py +++ b/problem/views/admin.py @@ -24,8 +24,8 @@ from utils.tasks import delete_files from ..models import Problem, ProblemRuleType, ProblemTag from ..serializers import (CreateContestProblemSerializer, CompileSPJSerializer, CreateProblemSerializer, EditProblemSerializer, EditContestProblemSerializer, - ProblemAdminSerializer, TestCaseUploadForm, ContestProblemMakePublicSerializer, - AddContestProblemSerializer, ExportProblemSerializer, + ProblemAdminSerializer, ProblemAdminListSerializer, TestCaseUploadForm, + ContestProblemMakePublicSerializer, AddContestProblemSerializer, ExportProblemSerializer, ExportProblemRequestSerializer, UploadProblemForm, ImportProblemSerializer, FPSProblemSerializer) from ..utils import TEMPLATE_BASE, build_problem_template @@ -249,7 +249,7 @@ class ProblemAPI(ProblemBase): problems = problems.filter(Q(title__icontains=keyword) | Q(_id__icontains=keyword)) if not user.can_mgmt_all_problem(): problems = problems.filter(created_by=user) - return self.success(self.paginate_data(request, problems, ProblemAdminSerializer)) + return self.success(self.paginate_data(request, problems, ProblemAdminListSerializer)) @problem_permission_required @validate_serializer(EditProblemSerializer) @@ -370,7 +370,7 @@ class ContestProblemAPI(ProblemBase): keyword = request.GET.get("keyword") if keyword: problems = problems.filter(title__contains=keyword) - return self.success(self.paginate_data(request, problems, ProblemAdminSerializer)) + return self.success(self.paginate_data(request, problems, ProblemAdminListSerializer)) @validate_serializer(EditContestProblemSerializer) def put(self, request):