From 10af0256b8e064c22cae71a0f51424232eec998e Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Sat, 4 Jul 2026 11:40:45 -0600 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=20OI=20=E6=AE=8B=E7=95=99?= =?UTF-8?q?=EF=BC=9AUserProfile=20=E7=9A=84=20oi=5Fproblems=5Fstatus=20/?= =?UTF-8?q?=20total=5Fscore=20/=20add=5Fscore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 判题不再写入 OI 相关状态后,UserProfile 上的 OI 字段永远为空/为 0: - 删除 oi_problems_status、total_score 两列及 add_score() 方法 - ProfileProblemDisplayIDRefreshAPI 去掉 oi_problems 合并分支 Co-Authored-By: Claude Opus 4.8 --- ...userprofile_oi_problems_status_and_more.py | 21 +++++++++++++++++++ account/models.py | 11 ---------- account/views/oj.py | 7 ++----- 3 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 account/migrations/0008_remove_userprofile_oi_problems_status_and_more.py diff --git a/account/migrations/0008_remove_userprofile_oi_problems_status_and_more.py b/account/migrations/0008_remove_userprofile_oi_problems_status_and_more.py new file mode 100644 index 0000000..34ba13b --- /dev/null +++ b/account/migrations/0008_remove_userprofile_oi_problems_status_and_more.py @@ -0,0 +1,21 @@ +# Generated by Django 6.0.4 on 2026-07-04 17:32 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0007_rename_admin_to_student_admin'), + ] + + operations = [ + migrations.RemoveField( + model_name='userprofile', + name='oi_problems_status', + ), + migrations.RemoveField( + model_name='userprofile', + name='total_score', + ), + ] diff --git a/account/models.py b/account/models.py index 4a64ae6..35ecf07 100644 --- a/account/models.py +++ b/account/models.py @@ -108,8 +108,6 @@ class UserProfile(models.Model): # } # } acm_problems_status = JSONField(default=dict, db_default=models.Value({}, output_field=models.JSONField())) - # like acm_problems_status, merely add "score" field - oi_problems_status = JSONField(default=dict, db_default=models.Value({}, output_field=models.JSONField())) real_name = models.TextField(null=True) avatar = models.TextField(default=f"{settings.AVATAR_URI_PREFIX}/default.png") @@ -119,10 +117,7 @@ class UserProfile(models.Model): school = models.TextField(null=True) major = models.TextField(null=True) language = models.TextField(null=True) - # for ACM accepted_number = models.IntegerField(default=0, db_default=0) - # for OI - total_score = models.BigIntegerField(default=0, db_default=0) submission_number = models.IntegerField(default=0, db_default=0) def add_accepted_problem_number(self): @@ -133,11 +128,5 @@ class UserProfile(models.Model): self.submission_number = models.F("submission_number") + 1 self.save(update_fields=["submission_number"]) - # 计算总分时, 应先减掉上次该题所得分数, 然后再加上本次所得分数 - def add_score(self, this_time_score, last_time_score=None): - last_time_score = last_time_score or 0 - self.total_score = models.F("total_score") - last_time_score + this_time_score - self.save(update_fields=["total_score"]) - class Meta: db_table = "user_profile" diff --git a/account/views/oj.py b/account/views/oj.py index 5ccd7f7..51ff3b9 100644 --- a/account/views/oj.py +++ b/account/views/oj.py @@ -517,17 +517,14 @@ class ProfileProblemDisplayIDRefreshAPI(AsyncAPIView): async def get(self, request): profile = await UserProfile.objects.aget(user=request.user) acm_problems = profile.acm_problems_status.get("problems", {}) - oi_problems = profile.oi_problems_status.get("problems", {}) - ids = list(acm_problems.keys()) + list(oi_problems.keys()) + ids = list(acm_problems.keys()) if not ids: return self.success() display_ids = [did async for did in Problem.objects.filter(id__in=ids, visible=True).values_list("_id", flat=True)] id_map = dict(zip(ids, display_ids)) for k, v in acm_problems.items(): v["_id"] = id_map[k] - for k, v in oi_problems.items(): - v["_id"] = id_map[k] - await profile.asave(update_fields=["acm_problems_status", "oi_problems_status"]) + await profile.asave(update_fields=["acm_problems_status"]) return self.success()