2013-01-22 2 views
3

일반 클래스 기반 뷰를 사용하기 시작 했으므로 시간을 절약 할 수 있습니다. 하지만 믹스 인을 사용하여 각보기에서 코딩하지 않고 일반 impl을 제공 할 수 있는지 궁금합니다. 예를 들어 나는 ListViewDetailView입니다. 목록 작성 및 수정을 제한하기 위해 get_queryset()을 덮어 쓰고 로그인 한 사용자로 필터링 할 수 있습니다. 당신이 짐작하지만, 난클래스 기반 뷰에서 믹스 인 사용하기 - Django

class JediListView(ListView): 
    def get_queryset(self): 
     q = <call super>.filter(user=request.user) #assume i have 'login_required' in the urls 

class JediDetailView(DetailView): 
    def get_queryset(self): 
     q = <call super>.filter(user=request.user) #assume i have 'login_required' in the urls 

내가보기의 각 새 상위 클래스를 만들 수, 각보기에 그렇게해야하지만, 난 여전히 코드를 반복 될 것이다. 나는 유지 mixin에 대해 궁금

class RepublicListView(ListView): 
    # override get_queryset code as above 

class JediListView(RepublicListView): 

# repeat fot DetailView, DeleteView, UpdateView 

, 나는 유지 mixin이 작동하는 방법을 정확하게 확신 [자바 배경에서, 그래서 동시에 두려워하고 두려워입니다]

+0

누군가가이 질문을 편집 할 수 있습니다 : 당신은 다음과 믹스 인 작성할 수 있습니다

class UserFilterMixin: def get_queryset(self): return <call super>.filter(user=self.request.user) 

을 그리고 같은 클래스에서 사용 그것은 내게 명확하지 않다 – mehmet

답변

8

실제로 대부분 답을 찾았습니다. ,

class RepublicListView(LoginRequiredMixin, UserFilterMixin, ListView): 

등등 다른 클래스 ...

2

당신은 django-braces에서 LoginRequiredMixin를 사용할 수 있습니다. TWO SCOOPS of DJANGO에서 Chapter-8: Best Practices for Class-Based Views 당으로

from django.views.generic import ListView, DetailView 

from braces.views import LoginRequiredMixin 


class JediListView(LoginRequiredMixin, ListView): 
    model = JediModel 


class JediDetailView(LoginRequiredMixin, Detail): 
    model = JediModel 

,

타사 패키지 : CBVs + 장고 - 중괄호 함께 우리는 장고 중괄호를 장고 CBVs에 대한 누락 된 구성 요소입니다 느낌이 아주 좋습니다. 그것 Django CBVs 많이 쉽게 구현할 수 있도록 명확하게 코딩 된 mixins 집합을 제공합니다. ! e 다음 장에서는 다양한 코드 예제에서 믹스 인 을 보여줍니다.

+0

실제로 위의 질문에 대한 답변이 아닙니다. – melbic

+0

사실, 그건 내 실수 였어. 나는 현재 사용자를 위해 queryset을 필터링했던 것처럼'UserFilterMixin'을 정의 했어야했다. – pankaj28843

관련 문제