Minxin
class TodoMOMCV(MultipleObjectMixin, CreateView):
model = Todo
fields = '__all__'
template_name = 'todo/todo_form_list.html'
success_url = reverse_lazy('todo:mixin')
def get(self, request, *args, **kwargs):
self.object_list = self.get_queryset()
return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.object_list = self.get_queryset()
return super().post(request, *args, **kwargs)
class TodoDelV2(DeleteView):
model = Todo
success_url = reverse_lazy('todo:mixin')
def get(self, request, *args, **kwargs):
return self.delete(request, *args, **kwargs)
- CreateView + ListView
- 상속 순서를 주의해야된다.
- CreateView가 좀더 복잡한 형태로 상속되어있다. -> 먼저 상속받아줘야 에러 발생 가능성이 줄어든다.
- View 들을 살펴보면, Mixin Class들을 조합해서 Generic View를 만든다.
- 위 소스에서는 get_context_data를 쓰면 object_list 내용이 넘어가게된다. 그러면 ListView가 아니라 MultipleObjectMixin를 사용한다.
class TodoMOMCV(MultipleObjectMixin, CreateView):
model = Todo
fields = '__all__'
template_name = 'todo/todo_form_list.html'
success_url = reverse_lazy('todo:mixin')
def get(self, request, *args, **kwargs):
self.object_list = self.get_queryset()
return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.object_list = self.get_queryset()
return super().post(request, *args, **kwargs)
- self.object_list를 준비해야된다.
- 상위 클래스 get을 호출하게되면 CreateView의 get이 호출된다.
- CreateView는 상위 클래스인 ProcessFormView도 조합되어있어 이 get을 갖고있다. ListView는 스스로 구현한 get만 있다.
- 오버라이딩 하고 있을 때는 부모와 동일하게 구현해주는게 좋다.
- get_queryset() method는 상속 순서가 앞인 곳부터의 메서드를 사용하게 된다. (순서 중요이유)
delete view
class TodoDelV2(DeleteView):
model = Todo
success_url = reverse_lazy('todo:mixin')
def get(self, request, *args, **kwargs):
return self.delete(request, *args, **kwargs)
- get 요청 시 form 요청을 하지말고, delete만하도록 한다.
- get method를 delete method로 대체? 오버라이딩? 해준 것임
- 페이지 이동이 매우 빠르게 일어나서 rendering 하지 않은 것처럼 보일 뿐이다.