inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

감사의 말

url 파라미터가 2개이상일 때 가져오는 방법 질문입니다.

해결된 질문

441

honge7694

작성한 질문수 9

0

안녕하세요 강사님 generics를 이용하여 진행하고 있는데, url이 {호스트명}/<게시글번호>/댓글/<댓글번호>/ 일 때 어떻게 get_queryset을 작성해야할 까요? 아래는 제가 작성한 get_queryset입니다.

# urls.py
path('<int:post_pk>/comment/<int:comment_pk>/', views.CommentDetailAPIView.as_view(), name='comment_detail'),


# views.py
class CommentDetailAPIView(RetrieveUpdateDestroyAPIView):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer
    permission_classes = [IsAuthorOrReadonly, ]

    def get_queryset(self):
        qs = super().get_queryset()
        qs = qs.filter(post__pk=self.kwargs['post_pk']).filter(pk=self.kwargs['comment_pk'])
        return qs

현재 이렇게 진행하면 위와같이 에러가 나타는데, 해결을 못하고 있습니다.

docker react django python

답변 1

1

이진석

안녕하세요.

RetrieveUpdateDestroyAPIView에서는
get_object 메서드를 호출하여 관련 모델 인스턴스를 획득하며,
get_object 호출 시에 get_queryset 메서드를 호출합니다.

관련코드 : https://github.com/encode/django-rest-framework/blob/2d19f233ab36805264ec6d4655a0105d8b37f989/rest_framework/generics.py#L75

get_queryset을 재정의하셨지만, 이후에 get_object에서
self.kwargs["pk"] 값을 참조할려는 데, 그 값이 없어서 발생하는 오류입니다.

관련코드 : https://github.com/encode/django-rest-framework/blob/2d19f233ab36805264ec6d4655a0105d8b37f989/rest_framework/generics.py#L86

오류화면의 에러메세지를 다시 차근차근 읽어보시면, 위에서 설명드린 내용일 것입니다.
APIView에서는 기본적으로 self.kwargs["pk"] 단일 컬럼 만으로 지정 모델에서 조회합니다.
"pk" 필드명은 GenericAPIView의 클래스 변수 lookup_field로 디폴트 지정되어있습니다.

comment의 pk만으로 Comment 조회가 가능하기에 굳이 post_pk를 Comment조회에 사용하실 필요가 없으실 수도 있습니다. 그렇다면 <int:comment_pk> 를 <int:pk> 로 고치는 것만으로 get_queryset 재정의 조차 필요없을 수가 있겠구요.

post_pk까지 Comment 조회에 사용하셔야겠다면,
get_object를 재정의하셔서 해당 Comment 인스턴스를 반환토록 하시는 것이
보다 간결한 구현이 될 듯 합니다.

이때 GenericAPIView의 get_object 구현을 꼼꼼이 살펴보시어,
self.filter_queryset, 404처리, self.check_object_permission 메서드 호출도
꼭 같이 호출해주셔야 합니다.

살펴보시고 또 질문 남겨주세요.

화이팅입니다. :-)

안녕하세요.

0

51

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

275

1

useEffect 훅에서 else 유무에 따른 결과

0

211

1

useAxios 훅의 dependency array 설정

0

245

1

useEffect에서 변수 업데이트 관련 질문

0

382

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

268

1

bootstrap4

0

471

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

365

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

574

3

useState는 필수일까요?

0

263

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

600

4

Django allauth를 사용한 소셜 로그인 시 에러

0

655

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

556

2

useLocalStorage() 함수 사용여부

0

229

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

449

1

리듀서의 의미 재확인

0

430

1

simple-jwt Refresh Token 사용 노하우

0

899

2

docker compose 를 통한 배포 관련 오류 문의

0

673

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

365

1

is_like_user

0

233

1

related_name 오류

0

275

1

re_path 오류

0

259

1

re_path url

0

251

1

No post matches the given query

0

661

2