UpdateView {django}
CCBV, Classy Class Based View -- django에서 참고 많이했다. 글 수정을 위한 뷰 클래스 작성을 하는데 get
, post
메서드를 만들지 않고도 가능하다니
그것은 애트리뷰트만 잘 알고 있으면 된다. 특히나 CCBV를 참고하면 복잡한 상속관계에서 오는 메서드, 애트리뷰트를 한 눈에 볼 수 있다. 거기에서 내가 원하는 확장만 추가하면 된다.
어떤 믹스인은 반드시 정의해야 하는 애트리뷰트가 있다. 그걸 정의하지 않으면 ImproperlyConfigured
예외가 발생할 수 있으니 문제가 생기더라도 놀라지 말자.
Attributes#
model
template_name
form_class
success_url
queryset
Methods#
-
get_form_kwargs
: keyword argument를 확장할 수 있는 메서드이다. -
form_valid
- class-based-views {doc}
- Models and
request.user
{doc} django.views.generic.ModelFormMixin.form_valid()
를 따라가보면form_valid
안에form.save()
를 호출하는 것을 볼 수 있다. 따라서 우리가post
메서드를 직접 구현할 때 form에 없던author
를 추가했었던 걸 기억해보자. 객체지향 안에서 기능을 확장하거나 후크를 걸기 위해선 오버라이드를 하여야 한다.form.instance.<attr>
를 통하여 form을 확장할 수 있다.
from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic.edit import CreateView from myapp.models import Author class AuthorCreateView(LoginRequiredMixin, CreateView): model = Author fields = ["name"] def form_valid(self, form): form.instance.created_by = self.request.user return super().form_valid(form)