add contest announcement

This commit is contained in:
virusdefender
2017-01-25 12:50:35 +08:00
parent 89859d9844
commit e34da1ac33
7 changed files with 134 additions and 8 deletions

View File

@@ -0,0 +1,123 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.12 on 2017-01-25 04:50
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import jsonfield.fields
import utils.models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='ACMContestRank',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('total_submission_number', models.IntegerField(default=0)),
('total_ac_number', models.IntegerField(default=0)),
('total_time', models.IntegerField(default=0)),
('submission_info', jsonfield.fields.JSONField(default={})),
],
options={
'db_table': 'acm_contest_rank',
},
),
migrations.CreateModel(
name='Contest',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=40, unique=True)),
('description', utils.models.RichTextField()),
('real_time_rank', models.BooleanField()),
('password', models.CharField(blank=True, max_length=30, null=True)),
('contest_type', models.CharField(max_length=36)),
('rule_type', models.CharField(max_length=36)),
('start_time', models.DateTimeField()),
('end_time', models.DateTimeField()),
('create_time', models.DateTimeField(auto_now_add=True)),
('last_updated_time', models.DateTimeField(auto_now=True)),
('visible', models.BooleanField(default=True)),
('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'db_table': 'contest',
},
),
migrations.CreateModel(
name='ContestAnnouncement',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=128)),
('content', utils.models.RichTextField()),
('create_time', models.DateTimeField(auto_now_add=True)),
('contest', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contest.Contest')),
],
options={
'db_table': 'contest_announcement',
},
),
migrations.CreateModel(
name='ContestProblem',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=50)),
('description', utils.models.RichTextField()),
('input_description', models.CharField(max_length=10000)),
('output_description', models.CharField(max_length=10000)),
('samples', models.TextField(blank=True)),
('test_case_id', models.CharField(max_length=40)),
('hint', utils.models.RichTextField(blank=True, null=True)),
('create_time', models.DateTimeField(auto_now_add=True)),
('last_update_time', models.DateTimeField(blank=True, null=True)),
('time_limit', models.IntegerField()),
('memory_limit', models.IntegerField()),
('spj', models.BooleanField(default=False)),
('spj_language', models.IntegerField(blank=True, null=True)),
('spj_code', models.TextField(blank=True, null=True)),
('spj_version', models.CharField(blank=True, max_length=32, null=True)),
('visible', models.BooleanField(default=True)),
('total_submit_number', models.IntegerField(default=0)),
('total_accepted_number', models.IntegerField(default=0)),
('sort_index', models.CharField(max_length=30)),
('is_public', models.BooleanField(default=False)),
('contest', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contest.Contest')),
('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'db_table': 'contest_problem',
},
),
migrations.CreateModel(
name='OIContestRank',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('total_submission_number', models.IntegerField(default=0)),
('total_score', models.IntegerField(default=0)),
('submission_info', jsonfield.fields.JSONField(default={})),
('contest', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contest.Contest')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'db_table': 'oi_contest_rank',
},
),
migrations.AddField(
model_name='acmcontestrank',
name='contest',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contest.Contest'),
),
migrations.AddField(
model_name='acmcontestrank',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]

View File

@@ -3,13 +3,11 @@ from django.utils.timezone import now
from jsonfield import JSONField from jsonfield import JSONField
from account.models import User from account.models import User
from group.models import Group
from problem.models import AbstractProblem from problem.models import AbstractProblem
from utils.models import RichTextField from utils.models import RichTextField
class ContestType(object): class ContestType(object):
GROUP_CONTEST = "group_contest"
PUBLIC_CONTEST = "public_contest" PUBLIC_CONTEST = "public_contest"
PASSWORD_PROTECTED_CONTEST = "password_protected_contest" PASSWORD_PROTECTED_CONTEST = "password_protected_contest"
@@ -40,7 +38,6 @@ class Contest(models.Model):
create_time = models.DateTimeField(auto_now_add=True) create_time = models.DateTimeField(auto_now_add=True)
last_updated_time = models.DateTimeField(auto_now=True) last_updated_time = models.DateTimeField(auto_now=True)
created_by = models.ForeignKey(User) created_by = models.ForeignKey(User)
groups = models.ManyToManyField(Group)
# 是否可见 false的话相当于删除 # 是否可见 false的话相当于删除
visible = models.BooleanField(default=True) visible = models.BooleanField(default=True)
@@ -100,3 +97,13 @@ class OIContestRank(ContestRank):
class Meta: class Meta:
db_table = "oi_contest_rank" db_table = "oi_contest_rank"
class ContestAnnouncement(models.Model):
contest = models.ForeignKey(Contest)
title = models.CharField(max_length=128)
content = RichTextField()
create_time = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = "contest_announcement"

View File

@@ -1,5 +0,0 @@
from django.db import models
class Group(models.Model):
pass

View File

View File

View File

@@ -43,6 +43,7 @@ INSTALLED_APPS = (
'announcement', 'announcement',
'conf', 'conf',
'problem', 'problem',
'contest',
'utils', 'utils',
'rest_framework', 'rest_framework',