2013-06-01 1 views
1

야구 경기 통계를 보여주는 테이블을 만들고 싶습니다. 나는 현재 하나의 야구 경기를 대표하는 모델을 가지고있다.django 테이블 데이터 행이 번갈아 표시됩니다.

class Baseball(models.Model): 
    gametime = models.DateTimeField() 
    vteam = models.CharField(max_length=255) 
    vpitcher = models.CharField(max_length=255) 
    hteam = models.CharField(max_length=255) 
    hpitcher = models.CharField(max_length=255) 

다른 필드도 있지만 여기에 나와있는 내용을 설명하기에 충분합니다.

테이블을 렌더링하는 데 django-tables2을 사용하고 있습니다. 나는 테이블 클래스

class BaseballTable(tables.Table): 
    class Meta: 
     model = models.Baseball 

그리고 내보기

class Home(SingleTableView): 
    model = models.Baseball 
    table_class = tables.BaseballTable 

을 정의하지만 기본 동작은 내가 원하는 것이 아니다. 테이블에 내 데이터베이스의 항목 당 하나의 행이 표시됩니다.

gametime  vteam  vpitcher  hteam  hpitcher 
date1  vteam1 vpitcher1 hteam1 hpitcher1 
date2  vteam2 vpitcher2 hteam2 hpitcher2 

대신 나는 테이블의 행이 직접 데이터베이스 모델을 모방하지 싶지만, 다른 행은 그래서 같은 장소지만 2, 4 행이 다른에서 1과 3 행의 풀을 다음과 같이.

gametime  team  pitcher 
date1  vteam1 vpitcher1 
<blank>  hteam1 hpitcher1 
date2  vteam2 vpitcher2 
<blank>  hteam2 hpitcher2 

누구든지 django-tables2가이 작업을 수행 할 수 있는지 또는 내 테이블을 작성해야하는지 알고 있습니까?

+0

수 있습니다. 방법을 찾으려면 문서를 읽으십시오. – Colleen

+0

@ 콜린 그건별로 건설적이지 않아. 나는 그것이 합리적인 질문이라고 생각한다. 문서의 어느 부분이 이것을 다루고 있습니까? – Alasdair

+0

http://django-tables2.readthedocs.org/en/latest/#populating-a-table-with-data 사람들에게 당신을 위해 독서를 부탁하는 것이 합리적이라고 생각하지 않습니다. – Colleen

답변

1

나는 귀하에게 합리적인 질문이 있다고 생각합니다.

우선 모든 열을 재정의해야하므로 ModelTable이 아닌 일반 테이블을 사용하는 것이 좋습니다.

행의 데이터 종류가 다르다는 것은 django-tables2가 기본적으로 지원하는 것이 아니므로 문서에서 아무 것도 말하지 않습니다. 그러나 원하는 것을 성취 할 수있는 많은 방법이 있습니다.

한 가지 방법은 한 행에 date1 - vteam1 - vpitcher1이 포함되고 다음 행에 blank - hteam1 - hpitcher1이 포함되도록 테이블에 전달하는 데이터를 정렬하는 것입니다. 이렇게하려면 테이블 데이터로 새 목록을 만들고 원래 쿼리 데이터의 레코드를 입력합니다. 이 솔루션을 허용하는 경우 정렬에 매우주의해야합니다. 그들은 날짜 1가 반환되도록

또 다른 쉬운 방법은 vteam < BR/> hteam1, vpitcher1 < BR/> hpicher1, 쿼리를 만드는 것입니다. 그래서 이것을 렌더링하면 vteam1과 hteam1을 다른 행으로 가져옵니다! 지금 테스트 할 수 없기 때문에 이것이 작동하지 않는다면 <br>은 안전하지 않으므로 mark_safe로 묶인 값을 출력해야합니다.

팀 및 투수에 대한 render_row를 무시하고 mark_safe (value)를 반환하거나 값을 인쇄하는 새 클래스 TwoRowsColumn을 만듭니다. 두 행을 포함하는 작은 html 테이블을 만들 수도 있습니다 hteam 및 vteam이 있고 hteam/vteam 용 셀에 인쇄됩니다). 여기서는 정렬이 더 쉽지만 hteam 또는 hpitcher를 사용하여 정렬 할 수는 없습니다.

다른 방법이 있습니다. 예를 들어 ModelTable의 서브 클래 싱을 통해 원하는 것을 할 수는 있지만, 요구 사항이 매우 구체적이고 어디에서도 쉽게 재사용 할 수 없으므로 권장하지 않습니다.

+0

고맙습니다. 정렬은 실제로 유스 케이스에는 의미가 없으므로 사용하지 않도록 설정하려고합니다. –