Python GeraldoReports用逗号格式化求和值

2024-05-13 17:41:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Geraldo Reports为我的Django项目创建PDF报告。我不知道如何格式化汇总值。
我在报表组中有一个带有action=FIELD_ACTION_SUM的ObjectValue。我不知道如何将返回值格式化为一个用逗号分隔千位的数字。在

我尝试了get_text参数,它列在Geraldo Reports文档中,但没有很好地记录如何使用它。在

我的当前对象值:

ObjectValue(
  attribute_name='labor',
  action=FIELD_ACTION_SUM,
  left=7 * inch,
  width=.8 * inch,
  style={'alignment': TA_RIGHT},
  get_text=lambda instance, value: '{:,.2f}'.format(value),
  stores_text_in_cache=False
),

我还没找到解决办法。这里有人知道我做错了什么,或者我应该做什么吗?在


Tags: 项目djangotextfieldgetpdfvalue报告
1条回答
网友
1楼 · 发布于 2024-05-13 17:41:12

经过反复试验,我找到了答案!在我的例子中,我在一个名为“jd_gross”的查询集中有一个字段,我想在我的报告中合计该字段……我最终放弃了action=field_action_SUM部分,并自己滚了进去

在我的band_detail部分,我可以用逗号显示此字段,并显示以下内容:

        ObjectValue(attribute_name='jd_gross', left=26.7*cm, width=1.7*cm, style={'alignment':TA_RIGHT}, get_value=lambda instance: intcomma(instance.jd_gross)),

但是,对我来说,总结部分的答案是添加到: definit(self,*args,**kwargs): 章节,在: self.band_页眉.元素+=[ 我使用相同的概念计算总计,将其转换为格式化字符串,并在“摘要”部分添加一行作为系统字段,如下所示:

^{pr2}$

因此,我完整的继承报告如下:

类JobdetailsReport(DefaultReport): title='工作详细信息' 页面尺寸=横向(A4)

class band_detail(DetailBand):
    height=0.7*cm
    elements=[
        ObjectValue(attribute_name='jd_job', left=0.1*cm),
        ObjectValue(attribute_name='c_name', left=1.5*cm),
        ObjectValue(attribute_name='clientname', left=5.8*cm),
        ObjectValue(attribute_name='jd_return', left=10.1*cm),
        ObjectValue(attribute_name='jd_delivery', left=12.6*cm),
        ObjectValue(attribute_name='get_j_status1_display', left=15.1*cm),
        ObjectValue(attribute_name='get_j_status2_display', left=17.6*cm),
        ObjectValue(attribute_name='jd_prodref', left=20.1*cm),
        ObjectValue(attribute_name='userformalname', left=23*cm),
        ObjectValue(attribute_name='jd_gross', left=26.7*cm, width=1.7*cm, style={'alignment':TA_RIGHT}, get_value=lambda instance: intcomma(instance.jd_gross)),
        ]
    borders = {'bottom': True}

class band_summary(ReportBand):
    height = 1.7*cm
    elements = [
        Label(text='Records printed:', top=1*cm, left=0.5*cm),
        ObjectValue(expression='count(jd_job)', top=1*cm, left=5.6*cm),
        Label(text="Total Value:", top=1*cm, left=22*cm),
        ]
    borders = {'top': True}

def __init__(self, *args, **kwargs):
    super(JobdetailsReport, self).__init__(*args, **kwargs)

    self.band_page_header.elements += [
        Label(text="Job No.", top=0.8*cm, left=0.1*cm),
        Label(text="Client", top=0.8*cm, left=1.5*cm),
        Label(text="Delivery", top=0.8*cm, left=5.8*cm),
        Label(text="Return", top=0.8*cm, left=10.1*cm),
        Label(text="Delivery", top=0.8*cm, left=12.6*cm),
        Label(text="Physical Status", top=0.8*cm, left=15.1*cm),
        Label(text="Accts Status", top=0.8*cm, left=17.6*cm),
        Label(text="Reference", top=0.8*cm, left=20.1*cm),
        Label(text="Our Contact", top=0.8*cm, left=23*cm),
        Label(text="Gross", top=0.8*cm, left=27*cm),
        ]

    myset = self.queryset
    grosstotal = 0
    for myline in myset:
        if myline.jd_gross:
            grosstotal += myline.jd_gross
    ugrosstotal = intcomma(grosstotal)
    self.band_summary.elements += [
        SystemField(expression=ugrosstotal, top=1*cm, left=26.5*cm, width=1.9*cm, style={'alignment':TA_RIGHT}),
        ]

希望对你有帮助!我只花了几个小时就把它弄好了。。。。。。在

相关问题 更多 >