This commit is contained in:
2025-10-27 17:33:00 +08:00
parent 20c8aeffab
commit cf4de8a7fa

View File

@@ -108,9 +108,29 @@ class ProblemSetListSerializer(serializers.ModelSerializer):
return get_user_progress_data(obj, request) return get_user_progress_data(obj, request)
def get_badges(self, obj): def get_badges(self, obj):
"""获取题单的奖章列表""" """获取题单的奖章列表,并标记用户已获得的徽章"""
request = self.context.get("request")
badges = ProblemSetBadge.objects.filter(problemset=obj) badges = ProblemSetBadge.objects.filter(problemset=obj)
return ProblemSetBadgeSerializer(badges, many=True).data badge_data = ProblemSetBadgeSerializer(badges, many=True).data
# 如果用户已登录,检查哪些徽章已被获得
if request and request.user.is_authenticated:
earned_badge_ids = set(
UserBadge.objects.filter(
user=request.user,
badge__problemset=obj
).values_list('badge_id', flat=True)
)
# 为每个徽章添加是否已获得的标记
for badge in badge_data:
badge['is_earned'] = badge['id'] in earned_badge_ids
else:
# 未登录用户,所有徽章都标记为未获得
for badge in badge_data:
badge['is_earned'] = False
return badge_data
class CreateProblemSetSerializer(serializers.Serializer): class CreateProblemSetSerializer(serializers.Serializer):