diff --git a/backend/competition/serializers.py b/backend/competition/serializers.py index 489b178..55f0787 100644 --- a/backend/competition/serializers.py +++ b/backend/competition/serializers.py @@ -13,10 +13,7 @@ class CarouselItemSerializer(serializers.ModelSerializer): 'order', 'is_active'] def get_display_image(self, obj): - request = self.context.get('request') if obj.image: - if request: - return request.build_absolute_uri(obj.image.url) return obj.image.url return obj.image_url @@ -33,10 +30,7 @@ class HomePageConfigSerializer(serializers.ModelSerializer): 'organizer', 'undertaker', 'carousel1_items', 'carousel2_items'] def get_display_banner(self, obj): - request = self.context.get('request') if obj.banner_image: - if request: - return request.build_absolute_uri(obj.banner_image.url) return obj.banner_image.url return obj.banner_image_url @@ -54,6 +48,7 @@ class ScoreDimensionSerializer(serializers.ModelSerializer): model = ScoreDimension fields = ['id', 'name', 'description', 'weight', 'max_score', 'order'] + class CompetitionSerializer(serializers.ModelSerializer): score_dimensions = ScoreDimensionSerializer(many=True, read_only=True) display_cover_image = serializers.SerializerMethodField() @@ -67,13 +62,11 @@ class CompetitionSerializer(serializers.ModelSerializer): 'score_dimensions', 'created_at'] def get_display_cover_image(self, obj): - request = self.context.get('request') if obj.cover_image: - if request: - return request.build_absolute_uri(obj.cover_image.url) return obj.cover_image.url return obj.cover_image_url + class CompetitionEnrollmentSerializer(serializers.ModelSerializer): user = WeChatUserSerializer(read_only=True) @@ -82,6 +75,7 @@ class CompetitionEnrollmentSerializer(serializers.ModelSerializer): fields = ['id', 'competition', 'user', 'role', 'status', 'created_at'] read_only_fields = ['status'] + class ProjectFileSerializer(serializers.ModelSerializer): class Meta: model = ProjectFile @@ -90,12 +84,12 @@ class ProjectFileSerializer(serializers.ModelSerializer): def validate_file(self, value): if not value: return value - # 50MB limit limit_mb = 50 if value.size > limit_mb * 1024 * 1024: raise serializers.ValidationError(f"文件大小不能超过 {limit_mb}MB") return value + class ProjectSerializer(serializers.ModelSerializer): files = ProjectFileSerializer(many=True, read_only=True) contestant_info = serializers.SerializerMethodField() @@ -115,13 +109,11 @@ class ProjectSerializer(serializers.ModelSerializer): } def get_display_cover_image(self, obj): - request = self.context.get('request') if obj.cover_image: - if request: - return request.build_absolute_uri(obj.cover_image.url) return obj.cover_image.url return obj.cover_image_url + class ScoreSerializer(serializers.ModelSerializer): judge_name = serializers.CharField(source='judge.user.nickname', read_only=True) dimension_name = serializers.CharField(source='dimension.name', read_only=True) @@ -131,6 +123,7 @@ class ScoreSerializer(serializers.ModelSerializer): fields = ['id', 'project', 'judge', 'dimension', 'score', 'judge_name', 'dimension_name', 'created_at'] read_only_fields = ['judge'] + class CommentSerializer(serializers.ModelSerializer): judge_name = serializers.CharField(source='judge.user.nickname', read_only=True) score = serializers.SerializerMethodField() @@ -144,15 +137,11 @@ class CommentSerializer(serializers.ModelSerializer): scores = Score.objects.filter(project=obj.project, judge=obj.judge) if not scores.exists(): return None - - current_judge_total_score = 0 - current_judge_total_weight = 0 - + total_score = 0 + total_weight = 0 for score in scores: - current_judge_total_score += score.score * score.dimension.weight - current_judge_total_weight += score.dimension.weight - - if current_judge_total_weight > 0: - judge_score = current_judge_total_score / current_judge_total_weight - return round(judge_score, 1) + total_score += score.score * score.dimension.weight + total_weight += score.dimension.weight + if total_weight > 0: + return round(total_score / total_weight, 1) return None