This commit is contained in:
@@ -10,6 +10,13 @@ from .serializers import (
|
||||
ScoreSerializer, CommentSerializer, ScoreDimensionSerializer
|
||||
)
|
||||
|
||||
from rest_framework.pagination import PageNumberPagination
|
||||
|
||||
class StandardResultsSetPagination(PageNumberPagination):
|
||||
page_size = 10
|
||||
page_size_query_param = 'page_size'
|
||||
max_page_size = 100
|
||||
|
||||
class CompetitionViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
"""
|
||||
比赛视图集
|
||||
@@ -17,9 +24,23 @@ class CompetitionViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = Competition.objects.filter(is_active=True).order_by('-created_at')
|
||||
serializer_class = CompetitionSerializer
|
||||
permission_classes = [permissions.AllowAny]
|
||||
pagination_class = StandardResultsSetPagination
|
||||
filter_backends = [filters.SearchFilter]
|
||||
search_fields = ['title', 'description']
|
||||
|
||||
def get_queryset(self):
|
||||
"""
|
||||
获取比赛查询集,支持根据查询参数进行动态过滤
|
||||
"""
|
||||
queryset = super().get_queryset()
|
||||
|
||||
# 状态过滤
|
||||
status_param = self.request.query_params.get('status')
|
||||
if status_param and status_param != 'all':
|
||||
queryset = queryset.filter(status=status_param)
|
||||
|
||||
return queryset
|
||||
|
||||
@action(detail=True, methods=['post'], permission_classes=[permissions.AllowAny])
|
||||
def enroll(self, request, pk=None):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user