2013-09-24 2 views
1

django-tables 2에 필터 기능을 추가하려고하므로 django-filter을 선택했습니다. 나는 위대한 일한 설명서를 따라 갔지만, django-tables 2과 통합하는 방법을 모른다. 나는 필터 클래스를 만들어보기에 내가 이런 걸 만든 :django-tables2와 함께 django-filter를 사용하는 방법

queryset = Fitzroyfalls.objects.select_related().all() 
f = FitzroyfallsFilter(request.GET, queryset=queryset) 
table = FitsroyFallsTable(f.queryset) 
table.paginate(page=request.GET.get('page', 1), per_page=25) 
RequestConfig(request).configure(table) 
return render(request, 'query.html', {'table': table}) 

하지만 아무 일도 발생하지 않습니다, 그것은 단지 모든 데이터 테이블을 표시합니다.

답변

1

시도 시간이 지나면 나는 간단한 해결책을 얻었습니다. 뷰에서 그 줄을 추가합니다 : 그것은

if request.method == "GET" 
    list1=list() 
    for obj in f: 
     list1.append(obj) 
    table=FitsroyFallsTable(list1) 

aaand의 그!

0

테이블 = FitsroyFallsTable (f.qs)

+1

당신은 몇 가지를 추가 할 수 다음과 같이 난 당신의 코드를 적용 세부 묘사? – mjk

+0

@mjk 내 대답을 참조하십시오, 작동합니다! 이건 잘못이야! – user2137817

2

는 I는 FilterSet__iter__위한 방법을 조사하고 기본적 propertyqs 액세스한다. 그래서 @ huiming의 대답은 나를 위해 일한다.

queryset = Fitzroyfalls.objects.select_related().all() 
f = FitzroyfallsFilter(request.GET, queryset=queryset) 
table = FitsroyFallsTable(f.qs) 
RequestConfig(request, paginate={"per_page": 25, "page": 1}).configure(table) 
return render(request, 'query.html', {'table': table, 'filter': f}) 

을 내가 사용 :

django-filter==0.7 
django-tables2==0.14.0 
Django==1.6 
0

CBV의 경우 :

class FilteredSingleTableView(FilterView, SingleTableView): 

    def get_table_data(self): 
     data = super(FilteredSingleTableView, self).get_table_data() 
     return data if self.object_list is None else self.object_list 

사용법 :

class UserList(FilteredSingleTableView): 
    template_name = 'accounts/users_list.html' 
    model = User 
    table_class = UserTable 
    paginate_by = 10 
    filterset_class = UserFilter