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 account.models import User
from group.models import Group
from problem.models import AbstractProblem
from utils.models import RichTextField
class ContestType(object):
GROUP_CONTEST = "group_contest"
PUBLIC_CONTEST = "public_contest"
PASSWORD_PROTECTED_CONTEST = "password_protected_contest"
@ -40,7 +38,6 @@ class Contest(models.Model):
create_time = models.DateTimeField(auto_now_add=True)
last_updated_time = models.DateTimeField(auto_now=True)
created_by = models.ForeignKey(User)
groups = models.ManyToManyField(Group)
# 是否可见 false的话相当于删除
visible = models.BooleanField(default=True)
@ -100,3 +97,13 @@ class OIContestRank(ContestRank):
class Meta:
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',
'conf',
'problem',
'contest',
'utils',
'rest_framework',