2
2
3
3
from django .db .transaction import atomic
4
4
from django .shortcuts import get_object_or_404
5
- from rest_framework import status
5
+ from rest_framework import mixins , status , viewsets
6
6
from rest_framework .response import Response
7
7
from rest_framework .viewsets import ModelViewSet , ViewSet
8
8
19
19
from sponsor .validators import SponsorValidater
20
20
21
21
22
- class SponsorViewSet (ModelViewSet ):
22
+ class SponsorViewSet (
23
+ mixins .CreateModelMixin ,
24
+ mixins .RetrieveModelMixin ,
25
+ mixins .UpdateModelMixin ,
26
+ mixins .ListModelMixin ,
27
+ viewsets .GenericViewSet ,
28
+ ):
29
+ queryset = Sponsor .objects .all ()
23
30
serializer_class = SponsorSerializer
24
31
permission_classes = [IsOwnerOrReadOnly ] # 본인 소유만 수정 가능
25
- http_method_names = ["get" , "post" , "put" ]
26
32
validator = SponsorValidater ()
27
33
28
34
def get_queryset (self ):
29
- return Sponsor . objects . all ( ).order_by ("paid_at" )
35
+ return super (). get_queryset (). filter ( paid_at__isnull = False , level__year = self . request . version ).order_by ("level__order" , "paid_at" )
30
36
31
- def list (self , request , * args , ** kwargs ):
32
- queryset = Sponsor .objects .filter (paid_at__isnull = False ).order_by (
33
- "level" , "paid_at"
34
- )
35
- serializer = SponsorListSerializer (queryset , many = True )
36
- return Response (serializer .data )
37
+ def get_serializer_class (self ):
38
+ if self .action == "list" :
39
+ return SponsorListSerializer
40
+ return SponsorSerializer
37
41
38
42
@atomic
39
43
def create (self , request , * args , ** kwargs ):
@@ -54,7 +58,7 @@ def create(self, request, *args, **kwargs):
54
58
55
59
def retrieve (self , request , * args , ** kwargs ):
56
60
pk = kwargs ["id" ]
57
- sponsor_data = get_object_or_404 (Sponsor , pk = pk )
61
+ sponsor_data = get_object_or_404 (self . get_queryset () , pk = pk )
58
62
59
63
# 본인 소유인 경우는 모든 필드
60
64
# 그렇지 않은 경우는 공개 가능한 필드만 응답
@@ -86,20 +90,6 @@ def update(self, request, *args, **kwargs):
86
90
return Response (serializer .errors , status .HTTP_400_BAD_REQUEST )
87
91
88
92
89
- class SponsorListViewSet (ModelViewSet ):
90
- serializer_class = SponsorListSerializer
91
- http_method_names = ["get" ]
92
-
93
- def get_queryset (self ):
94
- return SponsorLevel .objects .all ()
95
-
96
- def list (self , request , * args , ** kwargs ):
97
- queryset = SponsorLevel .objects .all ().order_by ("-price" )
98
- serializer = SponsorListSerializer (queryset , many = True )
99
-
100
- return Response (serializer .data )
101
-
102
-
103
93
class SponsorRemainingAccountViewSet (ModelViewSet ):
104
94
serializer_class = SponsorRemainingAccountSerializer
105
95
http_method_names = ["get" ]
0 commit comments