[Vue-Django] Mixin Class View

JeongChaeJin·2022년 9월 7일
0

Vue-Django

목록 보기
8/14

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
    # template_name = 'todo/todo_confirm_delete.html'
    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
    # template_name = 'todo/todo_confirm_delete.html'
    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 하지 않은 것처럼 보일 뿐이다.

profile
OnePunchLotto

0개의 댓글