隐藏评论

This commit is contained in:
2025-06-15 17:48:51 +08:00
parent e9cd5f5a41
commit a5fc7cc369
2 changed files with 92 additions and 33 deletions

View File

@@ -77,11 +77,4 @@ class CommentStatisticsAPI(APIView):
difficulty=Round(Avg("difficulty_rating"), 2), difficulty=Round(Avg("difficulty_rating"), 2),
comprehensive=Round(Avg("comprehensive_rating"), 2), comprehensive=Round(Avg("comprehensive_rating"), 2),
) )
contents = comments.exclude(content="").values_list("content", flat=True) return self.success({"count": count, "rating": rating})
return self.success(
{
"count": count,
"rating": rating,
"contents": list(contents),
}
)

View File

@@ -5,7 +5,11 @@ from django import forms
from options.options import SysOptions from options.options import SysOptions
from utils.api import UsernameSerializer, serializers from utils.api import UsernameSerializer, serializers
from utils.constants import Difficulty from utils.constants import Difficulty
from utils.serializers import LanguageNameMultiChoiceField, SPJLanguageNameChoiceField, LanguageNameChoiceField from utils.serializers import (
LanguageNameMultiChoiceField,
SPJLanguageNameChoiceField,
LanguageNameChoiceField,
)
from .models import Problem, ProblemRuleType, ProblemTag, ProblemIOMode from .models import Problem, ProblemRuleType, ProblemTag, ProblemIOMode
from .utils import parse_problem_template from .utils import parse_problem_template
@@ -53,12 +57,16 @@ class CreateOrEditProblemSerializer(serializers.Serializer):
output_description = serializers.CharField() output_description = serializers.CharField()
samples = serializers.ListField(child=CreateSampleSerializer(), allow_empty=False) samples = serializers.ListField(child=CreateSampleSerializer(), allow_empty=False)
test_case_id = serializers.CharField(max_length=32) test_case_id = serializers.CharField(max_length=32)
test_case_score = serializers.ListField(child=CreateTestCaseScoreSerializer(), allow_empty=True) test_case_score = serializers.ListField(
child=CreateTestCaseScoreSerializer(), allow_empty=True
)
time_limit = serializers.IntegerField(min_value=1, max_value=1000 * 60) time_limit = serializers.IntegerField(min_value=1, max_value=1000 * 60)
memory_limit = serializers.IntegerField(min_value=1, max_value=1024) memory_limit = serializers.IntegerField(min_value=1, max_value=1024)
languages = LanguageNameMultiChoiceField() languages = LanguageNameMultiChoiceField()
template = serializers.DictField(child=serializers.CharField(min_length=1)) template = serializers.DictField(child=serializers.CharField(min_length=1))
rule_type = serializers.ChoiceField(choices=[ProblemRuleType.ACM, ProblemRuleType.OI]) rule_type = serializers.ChoiceField(
choices=[ProblemRuleType.ACM, ProblemRuleType.OI]
)
io_mode = ProblemIOModeSerializer() io_mode = ProblemIOModeSerializer()
spj = serializers.BooleanField() spj = serializers.BooleanField()
spj_language = SPJLanguageNameChoiceField(allow_blank=True, allow_null=True) spj_language = SPJLanguageNameChoiceField(allow_blank=True, allow_null=True)
@@ -66,7 +74,9 @@ class CreateOrEditProblemSerializer(serializers.Serializer):
spj_compile_ok = serializers.BooleanField(default=False) spj_compile_ok = serializers.BooleanField(default=False)
visible = serializers.BooleanField() visible = serializers.BooleanField()
difficulty = serializers.ChoiceField(choices=Difficulty.choices()) difficulty = serializers.ChoiceField(choices=Difficulty.choices())
tags = serializers.ListField(child=serializers.CharField(max_length=32), allow_empty=False) tags = serializers.ListField(
child=serializers.CharField(max_length=32), allow_empty=False
)
hint = serializers.CharField(allow_blank=True, allow_null=True) hint = serializers.CharField(allow_blank=True, allow_null=True)
source = serializers.CharField(max_length=256, allow_blank=True, allow_null=True) source = serializers.CharField(max_length=256, allow_blank=True, allow_null=True)
share_submission = serializers.BooleanField() share_submission = serializers.BooleanField()
@@ -116,6 +126,7 @@ class ProblemAdminSerializer(BaseProblemSerializer):
model = Problem model = Problem
fields = "__all__" fields = "__all__"
class ProblemAdminListSerializer(BaseProblemSerializer): class ProblemAdminListSerializer(BaseProblemSerializer):
class Meta: class Meta:
model = Problem model = Problem
@@ -127,15 +138,32 @@ class ProblemSerializer(BaseProblemSerializer):
class Meta: class Meta:
model = Problem model = Problem
exclude = ("test_case_score", "test_case_id", "visible", "is_public", exclude = (
"spj_code", "spj_version", "spj_compile_ok") "test_case_score",
"test_case_id",
"visible",
"is_public",
"spj_code",
"spj_version",
"spj_compile_ok",
)
class ProblemListSerializer(BaseProblemSerializer): class ProblemListSerializer(BaseProblemSerializer):
class Meta: class Meta:
model = Problem model = Problem
fields = ["id", "_id", "title", "submission_number", "accepted_number", fields = [
"difficulty", "created_by", "tags", "contest", "rule_type"] "id",
"_id",
"title",
"submission_number",
"accepted_number",
"difficulty",
"created_by",
"tags",
"contest",
"rule_type",
]
class ProblemSafeSerializer(BaseProblemSerializer): class ProblemSafeSerializer(BaseProblemSerializer):
@@ -143,9 +171,19 @@ class ProblemSafeSerializer(BaseProblemSerializer):
class Meta: class Meta:
model = Problem model = Problem
exclude = ("test_case_score", "test_case_id", "visible", "is_public", exclude = (
"spj_code", "spj_version", "spj_compile_ok", "test_case_score",
"difficulty", "submission_number", "accepted_number", "statistic_info") "test_case_id",
"visible",
"is_public",
"spj_code",
"spj_version",
"spj_compile_ok",
"difficulty",
"submission_number",
"accepted_number",
"statistic_info",
)
class ContestProblemMakePublicSerializer(serializers.Serializer): class ContestProblemMakePublicSerializer(serializers.Serializer):
@@ -184,13 +222,17 @@ class ExportProblemSerializer(serializers.ModelSerializer):
return self._html_format_value(obj.hint) return self._html_format_value(obj.hint)
def get_test_case_score(self, obj): def get_test_case_score(self, obj):
return [{"score": item["score"] if obj.rule_type == ProblemRuleType.OI else 100, return [
"input_name": item["input_name"], "output_name": item["output_name"]} {
for item in obj.test_case_score] "score": item["score"] if obj.rule_type == ProblemRuleType.OI else 100,
"input_name": item["input_name"],
"output_name": item["output_name"],
}
for item in obj.test_case_score
]
def get_spj(self, obj): def get_spj(self, obj):
return {"code": obj.spj_code, return {"code": obj.spj_code, "language": obj.spj_language} if obj.spj else None
"language": obj.spj_language} if obj.spj else None
def get_template(self, obj): def get_template(self, obj):
ret = {} ret = {}
@@ -203,10 +245,24 @@ class ExportProblemSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Problem model = Problem
fields = ("display_id", "title", "description", "tags", fields = (
"input_description", "output_description", "display_id",
"test_case_score", "hint", "time_limit", "memory_limit", "samples", "title",
"template", "spj", "rule_type", "source", "template") "description",
"tags",
"input_description",
"output_description",
"test_case_score",
"hint",
"time_limit",
"memory_limit",
"samples",
"template",
"spj",
"rule_type",
"source",
"template",
)
class AddContestProblemSerializer(serializers.Serializer): class AddContestProblemSerializer(serializers.Serializer):
@@ -216,7 +272,9 @@ class AddContestProblemSerializer(serializers.Serializer):
class ExportProblemRequestSerializer(serializers.Serializer): class ExportProblemRequestSerializer(serializers.Serializer):
problem_id = serializers.ListField(child=serializers.IntegerField(), allow_empty=False) problem_id = serializers.ListField(
child=serializers.IntegerField(), allow_empty=False
)
class UploadProblemForm(forms.Form): class UploadProblemForm(forms.Form):
@@ -257,7 +315,9 @@ class ImportProblemSerializer(serializers.Serializer):
input_description = FormatValueSerializer() input_description = FormatValueSerializer()
output_description = FormatValueSerializer() output_description = FormatValueSerializer()
hint = FormatValueSerializer() hint = FormatValueSerializer()
test_case_score = serializers.ListField(child=TestCaseScoreSerializer(), allow_null=True) test_case_score = serializers.ListField(
child=TestCaseScoreSerializer(), allow_null=True
)
time_limit = serializers.IntegerField(min_value=1, max_value=60000) time_limit = serializers.IntegerField(min_value=1, max_value=60000)
memory_limit = serializers.IntegerField(min_value=1, max_value=10240) memory_limit = serializers.IntegerField(min_value=1, max_value=10240)
samples = serializers.ListField(child=CreateSampleSerializer()) samples = serializers.ListField(child=CreateSampleSerializer())
@@ -284,6 +344,12 @@ class FPSProblemSerializer(serializers.Serializer):
samples = serializers.ListField(child=CreateSampleSerializer()) samples = serializers.ListField(child=CreateSampleSerializer())
source = serializers.CharField(max_length=200, allow_blank=True, allow_null=True) source = serializers.CharField(max_length=200, allow_blank=True, allow_null=True)
spj = SPJSerializer(allow_null=True) spj = SPJSerializer(allow_null=True)
template = serializers.ListField(child=serializers.DictField(), allow_empty=True, allow_null=True) template = serializers.ListField(
append = serializers.ListField(child=serializers.DictField(), allow_empty=True, allow_null=True) child=serializers.DictField(), allow_empty=True, allow_null=True
prepend = serializers.ListField(child=serializers.DictField(), allow_empty=True, allow_null=True) )
append = serializers.ListField(
child=serializers.DictField(), allow_empty=True, allow_null=True
)
prepend = serializers.ListField(
child=serializers.DictField(), allow_empty=True, allow_null=True
)