제네릭 뷰 정리

2021. 8. 17. 22:20·Programming
반응형

get_success_url 메소드

get_success_url 메소드는 POST 리퀘스트를 처리하는 CreateView, UpdateView, DeleteView에서 사용됩니다.

POST 리퀘스트가 성공적으로 처리됐을 때 (예를 들어 오브젝트가 성공적으로 생성됐을 때) 리디렉트되는 URL을 정하는 건데요. CreateView, UpdateView, DeleteView를 사용할 때는 get_success_url 메소드를 정의해 줘야 합니다.

# URL 파라미터가 없는 경우class MyView(CreateView):
    ...

    def get_success_url(self):
        return reverse('index')

# URL 파라미터가 있는 경우class MyView(CreateView):
    ...

    def get_success_url(self):
        return reverse('review-detail', kwargs={'review_id': self.object.id})

URL 경로를 직접 입력하지 않고 URL 네임을 사용하는 것이 좋고, 뷰가 다루고 있는 오브젝트는 self.object로 접근할 수 있습니다.

form_valid 메소드

form_valid 메소드는 폼을 사용하는 CreateView, UpdateView에서 사용됩니다.

form_valid 메소드는 폼 데이터가 모두 유효하면 폼 데이터를 새로운 오브젝트(CreateView), 또는 기존의 오브젝트(UpdateView)에 저장해 주는 역할을 합니다. 폼 데이터가 저장되기 전에 어떤 액션을 취하고 싶다면 form_valid 메소드를 오버라이딩해 주면 됩니다. CreateView (또는 UpdateView)에 이미 정의돼있는 form_valid 메소드를 우리 클래스에서 새로 정의해서 코드의 동작을 바꿔주는 거죠.

# 폼 데이터가 오브젝트에 저장되기 전에, author 필드를 만들어 준다class MyView(CreateView):
    ...

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

위 코드는 폼에 author라는 필드를 추가해 주고, CreateView의 form_valid 메소드를 호출해서 폼 데이터를 오브젝트에 저장해 줍니다. super()는 상속 대상(위 코드의 경우 CreateView)을 뜻합니다. 기존 메소드의 동작을 완전히 바꾸고 싶은 게 아니라, 중간에 어떤 로직을 추가해 주고 싶을 때는 super()를 이용해서 기존 메소드를 호출해 주면 됩니다.

get_context_data 메소드

get_context_data 메소드는 모든 제네릭 뷰에서 사용됩니다.

get_context_data 메소드는 템플릿에 전달되는 컨텍스트(여러 변수와 데이터)를 정해주는 메소드입니다. 이 메소드를 오버라이딩해서 컨텍스트에 데이터를 추가할 수 있습니다.

class MyView(DetailView):
    ...

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
# context 딕셔너리에 데이터 추가# 예: context['foo'] = 'bar'return context

super()를 활용해서 원래 전달되는 컨텍스트를 가져오고, 컨텍스트에 데이터를 추가해 준 다음, 컨텍스트를 리턴해 주면 됩니다.

get_queryset 메소드

get_queryset 메소드는 ListView에서 보여 줄 오브젝트 리스트를 설정해 줍니다. 기본적으로 model에 해당하는 모든 오브젝트를 리턴해 주는데, 이걸 바꿔주고 싶으면 get_queryset 메소드를 오버라이딩하면 됩니다.

class MyView(ListView):
    model = Foo
    ...

    def get_queryset(self):
        return Foo.objects.filter(<조건>)

get_object 메소드

get_object 메소드는 DetailView, UpdateView, DeleteView에서 다루는 오브젝트를 설정해 줍니다. (DetailView에서 보여 줄 오브젝트, UpdateView에서 수정할 오브젝트, DeleteView에서 삭제할 오브젝트 - CreateView는 기존의 오브젝트를 다루는 것이 아니라 새로운 오브젝트를 생성하는 거기 때문에 get_object 메소드가 사용되지 않습니다.)

기본적으로 pk_url_kwarg 파라미터로 전달되는 id값을 가진 오브젝트를 리턴해 주는데, 이걸 바꿔주고 싶으면 get_object 메소드를 오버라이드해 주면 됩니다.

class MyView(UpdateView):
    model = Foo

    def get_object(self, queryset=None):
        return <어떤 Foo 오브젝트>

 

제네릭 뷰 중요 메소드

ListView get_queryset, get_context_data
DetailView get_object, get_context_data
CreateView form_valid, get_context_data, get_success_url
UpdateView get_object, form_valid, get_context_data, get_success_url
DeleteView get_object, get_context_data, get_success_url
반응형
'Programming' 카테고리의 다른 글
  • Git/Github 제대로 알자! 🔥
  • Docker란? 🐳
  • AccessMixin 정리 노트
  • [Django]allauth URL & 유용한 세팅들🔎
기록하기-
기록하기-
  • 기록하기-
    꾸밈없이 끊임없이
    기록하기-
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Programming
      • Episode
  • 블로그 메뉴

    • 깃허브
    • 링크드인
  • 링크

    • Github
    • LinkedIn
  • 공지사항

  • 인기 글

  • 태그

    파이썬
    python
    파이썬기초
    Django
    파이썬문법
    파이썬 문법
    파이썬 기초
    python 기초 문법
    Python 문법
    python class
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
기록하기-
제네릭 뷰 정리
상단으로

티스토리툴바