update announcement and problem list serializer

This commit is contained in:
yuetsh
2024-06-12 10:05:26 +08:00
parent 5a8fb8d81a
commit 8a47c6e0ef
4 changed files with 29 additions and 14 deletions

View File

@@ -18,6 +18,14 @@ class AnnouncementSerializer(serializers.ModelSerializer):
fields = "__all__" fields = "__all__"
class AnnouncementListSerializer(serializers.ModelSerializer):
created_by = UsernameSerializer()
class Meta:
model = Announcement
exclude = ['content']
class EditAnnouncementSerializer(serializers.Serializer): class EditAnnouncementSerializer(serializers.Serializer):
id = serializers.IntegerField() id = serializers.IntegerField()
title = serializers.CharField(max_length=64) title = serializers.CharField(max_length=64)

View File

@@ -1,10 +1,18 @@
from utils.api import APIView from utils.api import APIView
from announcement.models import Announcement from announcement.models import Announcement
from announcement.serializers import AnnouncementSerializer from announcement.serializers import AnnouncementSerializer, AnnouncementListSerializer
class AnnouncementAPI(APIView): class AnnouncementAPI(APIView):
def get(self, request): 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) announcements = Announcement.objects.filter(visible=True)
return self.success(self.paginate_data(request, announcements, AnnouncementSerializer)) return self.success(self.paginate_data(request, announcements, AnnouncementListSerializer))

View File

@@ -116,6 +116,11 @@ class ProblemAdminSerializer(BaseProblemSerializer):
model = Problem model = Problem
fields = "__all__" fields = "__all__"
class ProblemAdminListSerializer(BaseProblemSerializer):
class Meta:
model = Problem
fields = ["_id", "id", "title", "created_by", "visible", "create_time"]
class ProblemSerializer(BaseProblemSerializer): class ProblemSerializer(BaseProblemSerializer):
template = serializers.SerializerMethodField("get_public_template") template = serializers.SerializerMethodField("get_public_template")
@@ -127,16 +132,10 @@ class ProblemSerializer(BaseProblemSerializer):
class ProblemListSerializer(BaseProblemSerializer): class ProblemListSerializer(BaseProblemSerializer):
template = serializers.SerializerMethodField("get_public_template")
class Meta: class Meta:
model = Problem model = Problem
exclude = ("test_case_score", "test_case_id", "visible", "is_public", fields = ["id", "_id", "title", "submission_number", "accepted_number",
"spj_code", "spj_version", "spj_compile_ok", "description", "difficulty", "created_by", "tags"]
"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")
class ProblemSafeSerializer(BaseProblemSerializer): class ProblemSafeSerializer(BaseProblemSerializer):

View File

@@ -24,8 +24,8 @@ from utils.tasks import delete_files
from ..models import Problem, ProblemRuleType, ProblemTag from ..models import Problem, ProblemRuleType, ProblemTag
from ..serializers import (CreateContestProblemSerializer, CompileSPJSerializer, from ..serializers import (CreateContestProblemSerializer, CompileSPJSerializer,
CreateProblemSerializer, EditProblemSerializer, EditContestProblemSerializer, CreateProblemSerializer, EditProblemSerializer, EditContestProblemSerializer,
ProblemAdminSerializer, TestCaseUploadForm, ContestProblemMakePublicSerializer, ProblemAdminSerializer, ProblemAdminListSerializer, TestCaseUploadForm,
AddContestProblemSerializer, ExportProblemSerializer, ContestProblemMakePublicSerializer, AddContestProblemSerializer, ExportProblemSerializer,
ExportProblemRequestSerializer, UploadProblemForm, ImportProblemSerializer, ExportProblemRequestSerializer, UploadProblemForm, ImportProblemSerializer,
FPSProblemSerializer) FPSProblemSerializer)
from ..utils import TEMPLATE_BASE, build_problem_template 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)) problems = problems.filter(Q(title__icontains=keyword) | Q(_id__icontains=keyword))
if not user.can_mgmt_all_problem(): if not user.can_mgmt_all_problem():
problems = problems.filter(created_by=user) 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 @problem_permission_required
@validate_serializer(EditProblemSerializer) @validate_serializer(EditProblemSerializer)
@@ -370,7 +370,7 @@ class ContestProblemAPI(ProblemBase):
keyword = request.GET.get("keyword") keyword = request.GET.get("keyword")
if keyword: if keyword:
problems = problems.filter(title__contains=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) @validate_serializer(EditContestProblemSerializer)
def put(self, request): def put(self, request):