2014-08-31 4 views
4

장고 필터 요청에 추가 필터 등록 정보를 추가해야합니다.django-filter : request.user를 사용하여 필터 쿼리를 확장하십시오.

내 모델 : 동일한 위치와 그 항목이 필터링 될 수있는 필터

class Event(models.Model): 
    name=models.CharField(max_length=254) 
    location=models.ForeignKey(Place) 
    invited_user=models.ManyToManyField(User,null=True, blank=True) 

. 이것은 작동 중입니다.

또한 invited_user가 request.user가 아닌 모든 항목을 제외해야합니다 (이 필터 속성은 사용자에게 권한이있는 경우에만 선택할 수 있음).

장고 필터로 가능합니까? 그렇다면 어떻게 할 수 있습니까?

내 필터 클래스 : 난 당신이보기에서의 검색어를 수정하여 그것을 할 수 귀하의 경우 생각 How do I filter tables with Django generic views?

답변

0

:

class EventFilter(django_filters.FilterSet): 
    class Meta: 
     model = Event 
     fields = ['location'] 

내 작업의 기반이 모델 가져 오기 이벤트에서 수입 django_filters 여기서 request.user에 액세스 할 수 있어야합니다. 따라서 django 필터에 깊이 파고 들지 않아도됩니다.

필자의 경우 dango_filters FilterView를 사용하여 양식을 렌더링 할 때 폼과 함께 필드를 숨기고 싶었습니다. 설명, 그래서 나는 FilterView에 대한 GET()를 오버라이드 사용자에게의 검색어를 제한하고, 필터 양식에서 원치 않는 필드를 팝업 바삭 양식의 레이아웃 편집을 사용 :

def get(self, request, *args, **kwargs): 
    """ 
    original code from django-filters.views.BaseFilterView - added admin check 
    """ 
    filterset_class = self.get_filterset_class() 
    self.filterset = self.get_filterset(filterset_class) 
    self.object_list = self.filterset.qs 
    # If not admin, restrict to assessor's own centre and clients 
    if not request.user.get_profile().is_admin: 
     self.object_list = self.object_list.filter(attendee__assessor=request.user) 
     self.filterset.form.helper.layout[0].pop(2) # centres filter 
     self.filterset.form.helper.layout[0].pop(1) # assessors filter 
    context = self.get_context_data(filter=self.filterset, 
            object_list=self.object_list) 
    return self.render_to_response(context) 
2

이 시도 :

class EventListView(BaseFilterView): 
    ... 
    def get_filterset(self, *args, **kwargs): 
     fs = super().get_filterset(*args, **kwargs) 
     fs.filters['location'].field.queryset = fs.filters['location'].field.queryset.filter(user=self.request.user) 
     return fs