과제 : get_queryset 해서 파라미터를 사용해서 필터 거치고 내가 들어간 회원의 판매물품만 들고와야한다.
class UserGoodsView(ModelViewSet):
# queryset = Goods.objects.prefetch_related('like','goodsimage_set').select_related('seller', 'buyer').all()
# queryset = Goods.objects.filter(seller_id=user_id, buyer_id=user_id)
serializer_class = GoodsSerializer
permission_classes = [IsAuthorOrReadOnly,]
# def get_permissions(self):
# if self.action == 'create':
# return [permissions.IsAuthenticated(),] # ()를 붙이는 이유는 super의 get_permissions를 보면 알 수 있다.
# return super(GoodsView, self).get_permissions()
def get_serializer_context(self):
return {
'request': self.request,
'format': self.format_kwarg,
'view': self,
'action' : self.action
}
# def perform_create(self, serializer):
# serializer.save(seller_id = self.request.user.id)
def get_queryset(self):
# queryset2 = queryset.objects.filter(seller_id=self.kwargs['pk'])
# goods=Goods.objects.all()
# filter_goods=goods.filter(seller_id=self.kwargs['pk'])
# print(goods)
# print(filter_goods)
return Goods.objects.prefetch_related('like','goodsimage_set').select_related('seller', 'buyer').all()
# Goods.objects.filter(seller_id=user_id, buyer_id=user_id)
def get_queryset(self):
goods=Goods.objects.all()
filter_goods=goods.filter(seller_id=self.kwargs['pk'])
print(goods)
print(filter_goods)
return goods.filter(seller_id=self.kwargs['pk'])
공식문서 읽으면서 하나씩 작성해봤다.
문제 쿼리셋에서는 필터가 되어서 print에는 잘 찍히지만 포스트맨에서는 한개만 나온다. 분명 3개가 나오게끔 했는데 이유가 뭘까?
해결 전역변수로 전체 오브젝트를 가져오고 메소드 안에서 필터를 해서 생긴 오류인 것 같다. 메소드에서 파라미터 이용하면서 리턴해서 해결!
그러면 작성한 두개코드를 비교해봤다 결과가 다를까?? 위의 코드일때 아래 나옴
일때는 아래의 코드
prefetch_related('like','goodsimage_set').select_related('seller', 'buyer') 는 쿼리를 줄여주기 위해 사용한것 같다 좀 더 공식문서를 읽어보고 뷰셋을 사용해보도록 노력 할 것이다.
'TIL' 카테고리의 다른 글
project_hands_up | html | js | (0) | 2022.12.14 |
---|---|
프로젝트중 ASGI_APPLICATION module 'handsup.asgi' 오류 (0) | 2022.12.11 |
backend | project review_receiver_backend (0) | 2022.12.08 |
12.7 수 | 비매너 정지 코드 리팩토링 (0) | 2022.12.08 |
12/6 | 프로젝트 백엔드 프론트 (0) | 2022.12.07 |