From 6a166c50ebc56c4dbdcf1a1899fe37e2a3727d4f Mon Sep 17 00:00:00 2001 From: jeremygan2021 Date: Tue, 17 Mar 2026 22:30:43 +0800 Subject: [PATCH] new --- backend/competition/judge_views.py | 30 ++++++++++++++++--- .../migrations/0006_add_peer_review_field.py | 18 +++++++++++ backend/competition/models.py | 2 ++ 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 backend/competition/migrations/0006_add_peer_review_field.py diff --git a/backend/competition/judge_views.py b/backend/competition/judge_views.py index c3466eb..898f2a0 100644 --- a/backend/competition/judge_views.py +++ b/backend/competition/judge_views.py @@ -264,8 +264,19 @@ def project_detail_api(request, project_id): if not enrollment: return JsonResponse({'error': 'No permission'}, status=403) - # Get Dimensions - dimensions = ScoreDimension.objects.filter(competition=project.competition, is_public=True).order_by('order') + # Get Dimensions - 根据角色过滤 + if role == 'contestant': + dimensions = ScoreDimension.objects.filter( + competition=project.competition, + is_public=True, + is_peer_review=True + ).order_by('order') + else: + dimensions = ScoreDimension.objects.filter( + competition=project.competition, + is_public=True, + is_peer_review=False + ).order_by('order') # Get existing scores by THIS user scores = Score.objects.filter(project=project, judge=enrollment) @@ -374,8 +385,19 @@ def submit_score(request): if not enrollment: return JsonResponse({'success': False, 'message': 'No permission'}) - # Save Scores - dimensions = ScoreDimension.objects.filter(competition=project.competition, is_public=True) + # Save Scores - 根据角色过滤维度 + if role == 'contestant': + dimensions = ScoreDimension.objects.filter( + competition=project.competition, + is_public=True, + is_peer_review=True + ) + else: + dimensions = ScoreDimension.objects.filter( + competition=project.competition, + is_public=True, + is_peer_review=False + ) for d in dimensions: score_key = f'score_{d.id}' if score_key in data: diff --git a/backend/competition/migrations/0006_add_peer_review_field.py b/backend/competition/migrations/0006_add_peer_review_field.py new file mode 100644 index 0000000..325646b --- /dev/null +++ b/backend/competition/migrations/0006_add_peer_review_field.py @@ -0,0 +1,18 @@ +# Generated by Django 6.0.1 on 2026-03-17 14:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('competition', '0005_scoredimension_is_public'), + ] + + operations = [ + migrations.AddField( + model_name='scoredimension', + name='is_peer_review', + field=models.BooleanField(default=False, help_text='如果开启,此评分维度仅在选手互评时可见,评委和嘉宾看不到', verbose_name='是否用于选手互评'), + ), + ] diff --git a/backend/competition/models.py b/backend/competition/models.py index e867626..160d8db 100644 --- a/backend/competition/models.py +++ b/backend/competition/models.py @@ -96,6 +96,8 @@ class ScoreDimension(models.Model): is_public = models.BooleanField(default=True, verbose_name="是否公开给评委", help_text="如果关闭,评委端将看不到此评分维度,通常用于AI自动评分") + is_peer_review = models.BooleanField(default=False, verbose_name="是否用于选手互评", help_text="如果开启,此评分维度仅在选手互评时可见,评委和嘉宾看不到") + order = models.IntegerField(default=0, verbose_name="排序权重") class Meta: