大幅优化数据库查询, 升级django至1.11 LTS, 升级python至3.6.2

This commit is contained in:
zema1
2017-08-29 19:26:38 +08:00
parent 539b45148b
commit 1e4ede6d1a
13 changed files with 57 additions and 33 deletions

View File

@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.4 on 2017-08-26 03:47
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('submission', '0004_auto_20170717_1324'),
]
operations = [
migrations.AddField(
model_name='submission',
name='username',
field=models.CharField(default="", max_length=30),
preserve_default=False,
),
]

View File

@@ -25,6 +25,7 @@ class Submission(models.Model):
problem_id = models.IntegerField(db_index=True)
create_time = models.DateTimeField(auto_now_add=True)
user_id = models.IntegerField(db_index=True)
username = models.CharField(max_length=30)
code = models.TextField()
result = models.IntegerField(default=JudgeStatus.PENDING)
# 判题结果的详细信息

View File

@@ -1,5 +1,4 @@
from .models import Submission
from account.models import User
from utils.api import serializers
from judge.languages import language_names
@@ -21,20 +20,14 @@ class SubmissionModelSerializer(serializers.ModelSerializer):
# 不显示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()
@@ -47,10 +40,7 @@ class SubmissionListSerializer(serializers.ModelSerializer):
exclude = ("info", "contest_id", "code")
def get_show_link(self, obj):
if self.user.id is None:
# 没传user或为匿名user
if self.user is None or 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

View File

@@ -34,6 +34,7 @@ def _submit(response, user, problem_id, language, code, contest_id):
return response.error("Problem not exist")
submission = Submission.objects.create(user_id=user.id,
username=user.username,
language=language,
code=code,
problem_id=problem._id,