Django | 2021. 12. 18. 14:35

Django FormUpdateView에서 overriding 가능한 내부 함수들 이름

내부 함수가 머가 있는지 막 찾아보는데, 그냥 여기 하나 저장해 두자. 검색어는 django updateview get_success_url form_class access 이런식으로 쳐봤다.

 

먼가 기본 기능하다가 막 오버라이딩 하고 싶은 욕구가 많은 뷰이긴 하다.

 

수정이라는 기능이...상태를 바꾸거나, 어떤 작업을 해 주고 싶은데 딱 해당 폼 값만 바꾸기는 아쉽다.

아래 함수들 중에 아무거나 골라서 overriding 해서 사용하기 바란다.

 

보통 form_valid() form_invalid() 를 많이 쓰긴 한다.

from https://dongsik93.github.io/til/2019/12/20/til-django-cbv(4)/ 

class FormMixin(ContextMixin):
    """Provide a way to show and handle a form in a request."""
    initial = {}
    form_class = None
    success_url = None
    prefix = None
  
    def get_initial(self):
        """Return the initial data to use for forms on this view."""
        return self.initial.copy()
  
    def get_prefix(self):
        """Return the prefix to use for forms."""
        return self.prefix
  
    def get_form_class(self):
        """Return the form class to use."""
        return self.form_class
  
    def get_form(self, form_class=None):
        """Return an instance of the form to be used in this view."""
        if form_class is None:
            form_class = self.get_form_class()
        return form_class(**self.get_form_kwargs())
  
    def get_form_kwargs(self):
        """Return the keyword arguments for instantiating the form."""
        kwargs = {
            'initial': self.get_initial(),
            'prefix': self.get_prefix(),
        }
  
        if self.request.method in ('POST', 'PUT'):
            kwargs.update({
                'data': self.request.POST,
                'files': self.request.FILES,
            })
        return kwargs
  
    def get_success_url(self):
        """Return the URL to redirect to after processing a valid form."""
        if not self.success_url:
            raise ImproperlyConfigured("No URL to redirect to. Provide a success_url.")
        return str(self.success_url)  # success_url may be lazy
  
    def form_valid(self, form):
        """If the form is valid, redirect to the supplied URL."""
        return HttpResponseRedirect(self.get_success_url())
  
    def form_invalid(self, form):
        """If the form is invalid, render the invalid form."""
        return self.render_to_response(self.get_context_data(form=form))
  
    def get_context_data(self, **kwargs):
        """Insert the form into the context dict."""
        if 'form' not in kwargs:
            kwargs['form'] = self.get_form()
        return super().get_context_data(**kwargs)

무료하니 침대에 속편하게 누워자자

Pixabay 님의 사진, 출처: Pexels

댓글을 달아 주세요

">