2011-04-05 103 views
1

我正在使用geraldo/reportlab在我的数据库上生成部分报告。 Reportlab只允许我一次执行一个查询集(就我的理解而言)。结果,我的报表的某些方面从ManyToMany字段和ForeignKeys中抽出。Django - 从geraldo报告中删除多余的unicode符号

例如,类band_detail在reports.py:

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'1', u'2', u'3'] 

...等等。我不知道如何摆脱unicode符号“你”。我无法遍历ObjectValue中的lambda函数。我尝试覆盖geraldo类和定义,如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,...) – 2011-04-05 18:14:52

+0

不幸的是,我无法遍历ObjectValue。但是,我可以在geraldo中遍历band_detail.elements,其中元素是ObjectValue返回的元素。问题是,当我去遍历band_detail.elements时,对象类型是None。出于某种原因,他们还没有被创建的时间geraldo命中进程do_after_generate。任何有关在geraldo中使用哪些函数的想法,以便我可以遍历我的元素? – Zach 2011-04-05 18:54:08

+0

为什么不在lambda中的value_list上应用编码函数? – manji 2011-04-05 19:14:14