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__"
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)

View File

@@ -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))

View File

@@ -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):

View File

@@ -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):