change enum

This commit is contained in:
2026-05-09 02:30:47 -06:00
parent 78158471b2
commit c466dfd3c6
23 changed files with 451 additions and 503 deletions

View File

@@ -0,0 +1,35 @@
# Generated by Django 6.0.4 on 2026-05-09 08:18
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("contest", "0003_acmcontestrank_acm_rank_contest_user_idx_and_more"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AlterUniqueTogether(
name="acmcontestrank",
unique_together=set(),
),
migrations.AlterUniqueTogether(
name="oicontestrank",
unique_together=set(),
),
migrations.AlterField(
model_name="contest",
name="rule_type",
field=models.TextField(choices=[("ACM", "ACM"), ("OI", "OI")]),
),
migrations.AddConstraint(
model_name="acmcontestrank",
constraint=models.UniqueConstraint(fields=("user", "contest"), name="unique_acm_rank_user_contest"),
),
migrations.AddConstraint(
model_name="oicontestrank",
constraint=models.UniqueConstraint(fields=("user", "contest"), name="unique_oi_rank_user_contest"),
),
]

View File

@@ -15,8 +15,7 @@ class Contest(models.Model):
# show real time rank or cached rank
real_time_rank = models.BooleanField()
password = models.TextField(null=True)
# enum of ContestRuleType
rule_type = models.TextField()
rule_type = models.TextField(choices=ContestRuleType.choices)
start_time = models.DateTimeField()
end_time = models.DateTimeField()
create_time = models.DateTimeField(auto_now_add=True)
@@ -46,13 +45,7 @@ class Contest(models.Model):
# 是否有权查看problem 的一些统计信息 诸如submission_number, accepted_number 等
def problem_details_permission(self, user):
return (
self.rule_type == ContestRuleType.ACM
or self.status == ContestStatus.CONTEST_ENDED
or user.is_authenticated
and user.is_contest_admin(self)
or self.real_time_rank
)
return self.rule_type == ContestRuleType.ACM or self.status == ContestStatus.CONTEST_ENDED or user.is_authenticated and user.is_contest_admin(self) or self.real_time_rank
class Meta:
db_table = "contest"
@@ -78,10 +71,11 @@ class ACMContestRank(AbstractContestRank):
class Meta:
db_table = "acm_contest_rank"
unique_together = (("user", "contest"),)
constraints = [
models.UniqueConstraint(fields=["user", "contest"], name="unique_acm_rank_user_contest"),
]
indexes = [
models.Index(fields=["contest", "accepted_number", "total_time"],
name="acm_rank_order_idx"),
models.Index(fields=["contest", "accepted_number", "total_time"], name="acm_rank_order_idx"),
models.Index(fields=["contest", "user"], name="acm_rank_contest_user_idx"),
]
@@ -94,7 +88,9 @@ class OIContestRank(AbstractContestRank):
class Meta:
db_table = "oi_contest_rank"
unique_together = (("user", "contest"),)
constraints = [
models.UniqueConstraint(fields=["user", "contest"], name="unique_oi_rank_user_contest"),
]
indexes = [
models.Index(fields=["contest", "total_score"], name="oi_rank_order_idx"),
models.Index(fields=["contest", "user"], name="oi_rank_contest_user_idx"),

View File

@@ -9,7 +9,7 @@ class CreateConetestSeriaizer(serializers.Serializer):
tag = serializers.CharField()
start_time = serializers.DateTimeField()
end_time = serializers.DateTimeField()
rule_type = serializers.ChoiceField(choices=[ContestRuleType.ACM, ContestRuleType.OI])
rule_type = serializers.ChoiceField(choices=ContestRuleType.choices)
password = serializers.CharField(allow_blank=True, max_length=32)
visible = serializers.BooleanField()
real_time_rank = serializers.BooleanField()