2017-11-17 11 views
3

django_tables2을 사용하여 테이블을 렌더링합니다. 한 테이블의 경우, 가장 최근 5 개의 항목 만보고 싶습니다. 따라서, 나는 테이블 객체에 전달하기 전에 내 검색어 세트를 주문해야합니다기본적으로 django_tables2 테이블의 순서를 비활성화합니다.

qset = myObject.objects.order_by('-start_time').all()[:5] 
table = MyTableClass(qset, template='path/to/template.html') 

이 다음과 같은 오류 메시지가 산출 :

AssertionError: Cannot reorder a query once a slice has been taken. 

내가 모든 django_tables.Column에 대한 orderable=False을 설정할 수 있습니다,하지만 MyTableClass이 상속 이후 다른 테이블 클래스, 나는 이것을 피하고 싶습니다.

미리 감사드립니다.

답변

4

에서 : http://django-tables2.readthedocs.io/en/latest/pages/api-reference.html#table-meta

주문할 (부울) : 컬럼의 주문 가능한 속성의 기본 값입니다.

테이블과 열이 값을 지정하지 않으면 열의 순서 값이이 값으로 대체됩니다. 이렇게하면 테이블의 각 열에 orderable = False를 추가하지 않고도 전체 테이블에서 순서를 사용하지 못하게하는 쉬운 메커니즘을 제공합니다. , 코멘트에 @Jieter에서 언급 한 바와 같이도 작동합니다 인수로 전달하는 (즉, 확인하지 않았다) :

class MyTableClass(django_tables2.Table): 
    class Meta: 
     orderable = False 
    ... 

업데이트 :

그래서이 내 문제를 해결

table = MyTable(data, orderable=False) 
+1

생성자에 대한 인수로 사용할 수도 있습니다. 'table = MyTable (data, orderable = False)'는 테이블의 순서를 비활성화합니다. 이것은'class Meta.orderable' 속성에 설정된 값보다 우선합니다. – Jieter

-3

시도해보십시오.

qset = myObject.objects.all().order_by('-start_time')[:5] 
+0

아니요, 작동하지 않습니다. – ezdazuzena

1

당신은 가장 최근 항목을 선택 __in을 사용할 수

most_recent = list(myObject.objects.order_by('-start_time').all()[:5].values_list('pk', flat=True)) # list is required if databases does not support LIMIT in subqueries 
qset = myObject.objects.filter(id__in=most_recent).order_by('-start_time') 
+0

두 번째 쿼리를 피하고 django_tables2.Table 개체 (가능한 경우)를 구성하여 문제를 해결하고 싶습니다. – ezdazuzena