backend/django

Django: DetailView, UpdateView pk나 slug 없이 사용하기

seul chan 2018. 2. 6. 10:10

CBV를 주로 사용하면서, 참 잘 만들었다고 감탄하고 있다.

DetailView, UpdateView 등 pk나 slug가 기본으로 필요한 CBV를 사용할 때, pk나 slug 없이 특정 object를 전달하는 방법을 공유한다.

get_object에 직접 해당 object를 넘겨주기만 하면 url에서 따로 pk, slug 사용 없이 깔끔하게 DetailView 등을 사용 가능하다. user 기반으로 한 페이지 (user mypage 등)을 만들 때 유용하게 사용할 수 있다.

다음은 마이페이지에서 프로필 사진 업데이트를 할 수 있는 MypageView의 예.

class MypageView(LoginRequiredMixin, UpdateView):
    model = User
    fields = ['profile_image']
    template_name = 'my_page.html'
    success_url = '/mypage'

    def get_object(self):
        return self.request.user