From 77cf8db4c4786fffea9e13da05c0a193e24d1f57 Mon Sep 17 00:00:00 2001 From: yuetsh <51725939@qq.com> Date: Mon, 1 Jul 2024 15:46:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AF=94=E8=B5=9B=E6=B7=BB=E5=8A=A0=E6=A0=87?= =?UTF-8?q?=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contest/migrations/0012_contest_tag.py | 19 +++++++++++++++++++ contest/models.py | 1 + contest/serializers.py | 2 ++ contest/views/oj.py | 5 ++++- 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 contest/migrations/0012_contest_tag.py diff --git a/contest/migrations/0012_contest_tag.py b/contest/migrations/0012_contest_tag.py new file mode 100644 index 0000000..a821bd2 --- /dev/null +++ b/contest/migrations/0012_contest_tag.py @@ -0,0 +1,19 @@ +# Generated by Django 5.0.6 on 2024-07-01 08:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contest', '0011_alter_acmcontestrank_submission_info_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='contest', + name='tag', + field=models.TextField(default=''), + preserve_default=False, + ), + ] diff --git a/contest/models.py b/contest/models.py index 4616bef..e96121c 100644 --- a/contest/models.py +++ b/contest/models.py @@ -11,6 +11,7 @@ from utils.models import RichTextField class Contest(models.Model): title = models.TextField() description = RichTextField() + tag = models.TextField() # show real time rank or cached rank real_time_rank = models.BooleanField() password = models.TextField(null=True) diff --git a/contest/serializers.py b/contest/serializers.py index 356cdda..bdca7ed 100644 --- a/contest/serializers.py +++ b/contest/serializers.py @@ -7,6 +7,7 @@ from .models import ACMContestRank, OIContestRank class CreateConetestSeriaizer(serializers.Serializer): title = serializers.CharField(max_length=128) description = serializers.CharField() + tag = serializers.CharField() start_time = serializers.DateTimeField() end_time = serializers.DateTimeField() rule_type = serializers.ChoiceField(choices=[ContestRuleType.ACM, ContestRuleType.OI]) @@ -20,6 +21,7 @@ class EditConetestSeriaizer(serializers.Serializer): id = serializers.IntegerField() title = serializers.CharField(max_length=128) description = serializers.CharField() + tag = serializers.CharField() start_time = serializers.DateTimeField() end_time = serializers.DateTimeField() password = serializers.CharField(allow_blank=True, allow_null=True, max_length=32) diff --git a/contest/views/oj.py b/contest/views/oj.py index 4164ec3..6bf7358 100644 --- a/contest/views/oj.py +++ b/contest/views/oj.py @@ -52,10 +52,13 @@ class ContestListAPI(APIView): keyword = request.GET.get("keyword") rule_type = request.GET.get("rule_type") status = request.GET.get("status") + tag = request.GET.get("tag") if keyword: - contests = contests.filter(title__contains=keyword) + contests = contests.filter(title__icontains=keyword) if rule_type: contests = contests.filter(rule_type=rule_type) + if tag: + contests = contests.filter(tag=tag) if status: cur = now() if status == ContestStatus.CONTEST_NOT_START: