2012-06-14 4 views
9

는 문서 말 :비의 검색어 데이터 순서는

Where the table is backed by a model, the database will handle the ordering. Where this is not the case, the Python cmp function is used and the following mechanism is used as a fallback when comparing across different types: ...

그러나 는 사용자 정의 열, 모델에 의해를 백업하는 테이블이 가능하다? 예 :

class MyModel(models.Model): 
    x = models.IntegerField() 
    y = models.IntegerField() 

    def z(self): 
     return x+y 

class MyTable(tables.Table): 
    z = tables.Column() 
    class Meta: 
     model = MyModel 

나는 이런 식으로 뭔가를하려고 할 때, 열이 확인 표시,하지만 난 정렬하려면 열 머리글을 클릭하면이 오류 얻을 :

Caught FieldError while rendering: Cannot resolve keyword u'z' into field. Choices are: ...

은 분명히이 z는 발견되지 않기 때문에를 데이터베이스 테이블에서.

이 방법이 있습니까?

+2

이것은 django-tables2의 버그/기능 부족입니다. http://github.com/bradleyayers/django-tables2/issues에 문제를 추가 하시겠습니까? 나는 최근에 이것을 깨뜨 렸지만 그것을 지키지 않았다. –

+0

[이슈가 열렸습니다.] (https://github.com/bradleyayers/django-tables2/issues/82)하지만이 문제는 해결되지 않았습니다. –

답변

2

데이터베이스 열이없는 속성으로 주문하는 경우에는 쿼리 세트를 사용할 수 없습니다. 당신은 테이블에 목록을 전달할 수 있습니다.

가정하여 models.py은 다음과 같습니다

from django.db import models 

class MyModel(models.Model): 
    def foo(self): 
     return something_complex() 

당신은 다음과 같습니다 tables.py을 할 수 :

당신의 views.py에서 다음
import django_tables2 as tables 
from .models import MyModel 

class MyModelTable(tables.Table): 
    foo = tables.Column() 

    class Meta: 
     model = MyModel 

:

from django_tables2.config import RequestConfig 
from django.core.paginator import InvalidPage 
from django.shortcuts import render 

def view_my_models(request): 
    # use a list so django_tables2 sorts in memory 
    my_models = list(MyModel.objects.all()) 

    my_models_table = MyModelTable(my_models) 
    RequestConfig(request).configure(my_models_table) 

    try: 
     page_number = int(request.GET.get('page')) 
    except (ValueError, TypeError): 
     page_number = 1 

    try: 
     my_models_table.paginate(page=page_number, per_page=10) 
    except InvalidPage: 
     my_models_table.paginate(page=1, per_page=10) 

    template_vars = {'table': my_models_table} 
    return render(response, "view_my_models.html", template_vars) 

an open ticket discussing this issue도 있습니다.

+0

queryset을 목록으로 변환하면 저에게 도움이되었습니다. 팁을 주셔서 감사합니다! – Matt