2017-05-08 09:29:01 +00:00
|
|
|
from django.db import models
|
|
|
|
from jsonfield import JSONField
|
2017-07-05 13:09:14 +00:00
|
|
|
from account.models import AdminType
|
2017-05-08 09:29:01 +00:00
|
|
|
|
|
|
|
from utils.shortcuts import rand_str
|
|
|
|
|
|
|
|
|
|
|
|
class JudgeStatus:
|
|
|
|
COMPILE_ERROR = -2
|
|
|
|
WRONG_ANSWER = -1
|
|
|
|
ACCEPTED = 0
|
|
|
|
CPU_TIME_LIMIT_EXCEEDED = 1
|
|
|
|
REAL_TIME_LIMIT_EXCEEDED = 2
|
|
|
|
MEMORY_LIMIT_EXCEEDED = 3
|
|
|
|
RUNTIME_ERROR = 4
|
|
|
|
SYSTEM_ERROR = 5
|
|
|
|
PENDING = 6
|
|
|
|
JUDGING = 7
|
2017-05-09 06:41:26 +00:00
|
|
|
PARTIALLY_ACCEPTED = 8
|
2017-05-08 09:29:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
class Submission(models.Model):
|
|
|
|
id = models.CharField(max_length=32, default=rand_str, primary_key=True, db_index=True)
|
2017-05-09 06:41:26 +00:00
|
|
|
contest_id = models.IntegerField(db_index=True, null=True)
|
2017-05-08 09:29:01 +00:00
|
|
|
problem_id = models.IntegerField(db_index=True)
|
2017-08-01 08:52:48 +00:00
|
|
|
create_time = models.DateTimeField(auto_now_add=True)
|
2017-05-08 09:29:01 +00:00
|
|
|
user_id = models.IntegerField(db_index=True)
|
2017-05-10 09:20:52 +00:00
|
|
|
code = models.TextField()
|
2017-05-08 09:29:01 +00:00
|
|
|
result = models.IntegerField(default=JudgeStatus.PENDING)
|
|
|
|
# 判题结果的详细信息
|
2017-05-09 06:41:26 +00:00
|
|
|
info = JSONField(default={})
|
2017-05-08 09:29:01 +00:00
|
|
|
language = models.CharField(max_length=20)
|
|
|
|
shared = models.BooleanField(default=False)
|
2017-07-04 12:59:25 +00:00
|
|
|
# 存储该提交所用时间和内存值,方便提交列表显示
|
2017-07-06 13:08:34 +00:00
|
|
|
# {time_cost: "", memory_cost: "", err_info: "", score: 0}
|
2017-07-04 12:59:25 +00:00
|
|
|
statistic_info = JSONField(default={})
|
2017-05-08 09:29:01 +00:00
|
|
|
|
2017-07-05 13:09:14 +00:00
|
|
|
def check_user_permission(self, user):
|
|
|
|
return self.user_id == user.id or \
|
|
|
|
self.shared is True or \
|
|
|
|
user.admin_type == AdminType.SUPER_ADMIN
|
|
|
|
|
2017-05-08 09:29:01 +00:00
|
|
|
class Meta:
|
|
|
|
db_table = "submission"
|
2017-08-01 08:52:48 +00:00
|
|
|
ordering = ("-create_time",)
|
2017-05-08 09:29:01 +00:00
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return self.id
|