mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2025-01-06 04:21:51 +00:00
14b850c652
contest,submission等表默认-create_time排序
57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
from .models import Submission
|
|
from account.models import User
|
|
from utils.api import serializers
|
|
from judge.languages import language_names
|
|
|
|
|
|
class CreateSubmissionSerializer(serializers.Serializer):
|
|
problem_id = serializers.IntegerField()
|
|
language = serializers.ChoiceField(choices=language_names)
|
|
code = serializers.CharField(max_length=20000)
|
|
contest_id = serializers.IntegerField(required=False)
|
|
|
|
|
|
class SubmissionModelSerializer(serializers.ModelSerializer):
|
|
info = serializers.JSONField()
|
|
statistic_info = serializers.JSONField()
|
|
|
|
class Meta:
|
|
model = Submission
|
|
|
|
|
|
# 不显示submission info详情的serializer
|
|
class SubmissionSafeSerializer(serializers.ModelSerializer):
|
|
username = serializers.SerializerMethodField()
|
|
statistic_info = serializers.JSONField()
|
|
|
|
class Meta:
|
|
model = Submission
|
|
exclude = ("info", "contest_id")
|
|
|
|
@staticmethod
|
|
def get_username(obj):
|
|
return User.objects.get(id=obj.user_id).username
|
|
|
|
|
|
class SubmissionListSerializer(serializers.ModelSerializer):
|
|
username = serializers.SerializerMethodField()
|
|
statistic_info = serializers.JSONField()
|
|
show_link = serializers.SerializerMethodField()
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.user = kwargs.pop("user", None)
|
|
super().__init__(*args, **kwargs)
|
|
|
|
class Meta:
|
|
model = Submission
|
|
exclude = ("info", "contest_id", "code")
|
|
|
|
def get_show_link(self, obj):
|
|
if self.user.id is None:
|
|
return False
|
|
return obj.check_user_permission(self.user)
|
|
|
|
@staticmethod
|
|
def get_username(obj):
|
|
return User.objects.get(id=obj.user_id).username
|