OnlineJudge/submission/serializers.py

53 lines
1.5 KiB
Python
Raw Normal View History

2017-05-15 08:42:15 +00:00
from .models import Submission
from account.models import User
2017-05-08 09:29:01 +00:00
from utils.api import serializers
from judge.languages import language_names
2017-05-08 09:29:01 +00:00
class CreateSubmissionSerializer(serializers.Serializer):
problem_id = serializers.IntegerField()
language = serializers.ChoiceField(choices=language_names)
2017-05-08 09:29:01 +00:00
code = serializers.CharField(max_length=20000)
2017-05-15 08:42:15 +00:00
class SubmissionModelSerializer(serializers.ModelSerializer):
info = serializers.JSONField()
statistic_info = serializers.JSONField()
2017-05-15 08:42:15 +00:00
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(SubmissionSafeSerializer):
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):
return obj.check_user_permission(self.user)
@staticmethod
def get_username(obj):
return User.objects.get(id=obj.user_id).username