Django - UpdateView pk 없이 사용하기

Django - UpdateView pk 없이 사용하기
Photo by Keith Johnston / Unsplash

url 로 UpdateView 의 PK 값을 넘겨주는 방식이 일반적인데, 사용자 정보 같은 것을 넘겨줄 때 사용자에 대한 pk 값이 노출되는게 부담스럽다.

꼭 넘겨줘야 하나? 내꺼만 고치면 되는데...

이때는 내장 함수를 통해 자기가 로딩 되면서 가져오도록 하면 된다. 자기 객체를 불러오는 방식이다. 주인공은 바로,

get_object(self)
@method_decorator(login_required, name="dispatch")
class profile_update_view(UpdateView):
    model = Profile
    # fields = "__all__"
    fields = ["level", "phone"]
    template_name = "profile.html"

    def get_object(self):
        print("profile_update_view get_object()", self.request.user)
        return Profile.objects.get(user=self.request.user)
        # return self.request.user

    def get_success_url(self):
        return self.request.META["HTTP_REFERER"]

쓸데없이 url 로 넘기지 않고 바로 자기가 호출될때 필요한 객체를 get_objct() 함수에서 가져와서 return 해주면 끝!

참고 페이지

Django: DetailView, UpdateView pk나 slug 없이 사용하기
CBV를 주로 사용하면서, 참 잘 만들었다고 감탄하고 있다. DetailView, UpdateView 등 pk나 slug가 기본으로 필요한 CBV를 사용할 때, pk나 slug 없이 특정 object를 전달하는 방법을 공유한다. get_object 에 직..