2011-04-05 2 views
1

geraldo/reportlab을 사용하여 데이터베이스에 대한 부분 보고서를 생성하고 있습니다. Reportlab에서는 한 번에 하나의 쿼리 세트 만 수행 할 수 있습니다 (필자는 이해합니다). 결과적으로 보고서의 특정 부분이 ManyToMany 필드와 ForeignKeys에서 빠져 나옵니다. 예를 들어Django - geraldo 보고서에서 불필요한 유니 코드 기호 제거

, 클래스 reports.py에서 band_detail : 등등

[u'1', u'2', u'3'] 

... 그리고 :이 같은 표시

ObjectValue(attribute_name='number', left = 9*cm, get_value=lambda instance: Drawing.objects.filter(number=DrawingRevision.objects.filter(part__id=instance.id).values('drawing')).values_list('number', flat=True)) 

. 유니 코드 기호 "u"를 제거하는 방법을 모르겠습니다. ObjectValue 내 람다 함수를 반복 할 수 없습니다. 나는 do_before_generate()와 같은 정의를 재정의하려고 시도했지만 운이 없었다.

해결 방법에 대한 의견이 있으십니까? 미리 감사드립니다!

답변

1

시도 :

[s.encode() for s in 
ObjectValue(attribute_name='number', 
      left = 9*cm, 
      get_value=lambda instance: 
       Drawing.objects.filter(number=DrawingRevision.objects 
              .filter(part__id=instance.id) 
              .values('drawing') 
            ).values_list('number', flat=True) 
      ) 
] 

또는

ObjectValue(attribute_name='number', 
      left = 9*cm, 
      get_value=lambda instance: 
      [ n.encode() for n in 
       Drawing.objects.filter(number=DrawingRevision.objects 
              .filter(part__id=instance.id) 
              .values('drawing') 
            ).values_list('number', flat=True) 
      ] 
      ) 

이 당신에게 제공해야합니다 :

['1', '2', '3'] 
+0

또한 불행하게도지도 (unicode.encode, ...) –

+0

철자 될 수 있습니다 , I ObjectValue를 통해 반복 할 수 없습니다. 그러나 geraldo 내에서 band_detail.elements를 반복 할 수 있습니다. 여기서 요소는 ObjectValue에 의해 반환됩니다. 문제는 band_detail.elements를 통해 반복 할 때 객체 유형이 없음이라는 것입니다. 웬일인지 geraldo가 do_after_generate 프로세스에 도달 할 때까지는 생성되지 않았습니다. 내 요소를 반복 할 수 있도록 geraldo에서 어떤 기능을 사용할 지에 대한 아이디어가 있습니까? – Zach

+0

람다 내부의 value_list에 encode 함수를 적용하지 않는 이유는 무엇입니까? – manji

관련 문제