add flowchart list
This commit is contained in:
@@ -41,14 +41,15 @@ class FlowchartSubmissionListSerializer(serializers.ModelSerializer):
|
||||
"""用于列表显示的简化序列化器"""
|
||||
|
||||
username = serializers.CharField(source="user.username")
|
||||
problem = serializers.CharField(source="problem._id")
|
||||
problem_title = serializers.CharField(source="problem.title")
|
||||
|
||||
class Meta:
|
||||
model = FlowchartSubmission
|
||||
fields = [
|
||||
"id",
|
||||
"username",
|
||||
"problem_title",
|
||||
"problem",
|
||||
"status",
|
||||
"create_time",
|
||||
"ai_score",
|
||||
@@ -58,3 +59,33 @@ class FlowchartSubmissionListSerializer(serializers.ModelSerializer):
|
||||
"processing_time",
|
||||
"evaluation_time",
|
||||
]
|
||||
|
||||
|
||||
class FlowchartSubmissionSummarySerializer(serializers.ModelSerializer):
|
||||
"""用于AI详情页面的极简序列化器,只包含必要字段"""
|
||||
|
||||
problem_title = serializers.CharField(source="problem.title")
|
||||
problem__id = serializers.CharField(source="problem._id")
|
||||
|
||||
class Meta:
|
||||
model = FlowchartSubmission
|
||||
fields = [
|
||||
"id",
|
||||
"problem__id",
|
||||
"problem_title",
|
||||
"ai_score",
|
||||
"ai_grade",
|
||||
"create_time",
|
||||
]
|
||||
|
||||
|
||||
class FlowchartSubmissionMergedSerializer(serializers.Serializer):
|
||||
"""合并后的流程图提交序列化器"""
|
||||
|
||||
problem__id = serializers.CharField()
|
||||
problem_title = serializers.CharField()
|
||||
submission_count = serializers.IntegerField()
|
||||
best_score = serializers.FloatField()
|
||||
best_grade = serializers.CharField()
|
||||
latest_submission_time = serializers.DateTimeField()
|
||||
avg_score = serializers.FloatField()
|
||||
|
||||
@@ -65,32 +65,32 @@ class FlowchartSubmissionAPI(APIView):
|
||||
|
||||
|
||||
class FlowchartSubmissionListAPI(APIView):
|
||||
@login_required
|
||||
def get(self, request):
|
||||
"""获取流程图提交列表"""
|
||||
user_id = request.GET.get("user_id")
|
||||
username = request.GET.get("username")
|
||||
problem_id = request.GET.get("problem_id")
|
||||
offset = int(request.GET.get("offset", 0))
|
||||
limit = int(request.GET.get("limit", 20))
|
||||
myself = request.GET.get("myself")
|
||||
|
||||
queryset = FlowchartSubmission.objects.select_related("user", "problem")
|
||||
|
||||
# 权限过滤
|
||||
if not request.user.is_admin_role():
|
||||
queryset = queryset.filter(user=request.user)
|
||||
|
||||
# 其他过滤条件
|
||||
if user_id:
|
||||
queryset = queryset.filter(user_id=user_id)
|
||||
if problem_id:
|
||||
queryset = queryset.filter(problem_id=problem_id)
|
||||
try:
|
||||
problem = Problem.objects.get(
|
||||
_id=problem_id, contest_id__isnull=True, visible=True
|
||||
)
|
||||
except Problem.DoesNotExist:
|
||||
return self.error("Problem doesn't exist")
|
||||
queryset = queryset.filter(problem=problem)
|
||||
if myself and myself == "1":
|
||||
queryset = queryset.filter(user=request.user)
|
||||
if username:
|
||||
queryset = queryset.filter(user__username__icontains=username)
|
||||
|
||||
total = queryset.count()
|
||||
submissions = queryset[offset : offset + limit]
|
||||
|
||||
serializer = FlowchartSubmissionListSerializer(submissions, many=True)
|
||||
|
||||
return self.success({"results": serializer.data, "total": total})
|
||||
data = self.paginate_data(request, queryset)
|
||||
data["results"] = FlowchartSubmissionListSerializer(
|
||||
data["results"], many=True
|
||||
).data
|
||||
return self.success(data)
|
||||
|
||||
|
||||
class FlowchartSubmissionRetryAPI(APIView):
|
||||
|
||||
Reference in New Issue
Block a user