我是这里的新手,我需要一些帮助
所以,我正在尝试用odoo和Base report CSV制作一个报告,在表中,我有2个关系字段,我不知道如何组合这些表,我试着像下面这样组合模块Base report的函数,但它给出了一个错误,一个空白错误,只会让我感到困惑,有人知道我该怎么做吗?
from odoo import models
import csv
class csvreport(models.AbstractModel):
_name = 'report.hr_timesheet.report'
_inherit = 'report.report_csv.abstract'
def generate_csv_report(self, writer, data, partners):
writer.writeheader()
for obj in partners:
employee = self.env.cr.execute("""select hr_employee.name where hr_employee.id = %s;""", (obj.employee_id))
task = self.env.cr.execute("""select project_task.name where project_task.id = %s;""", (obj.project_id))
writer.writerow({
'name': obj.name,
'date': obj.date,
'unit_amount': obj.unit_amount,
'responsible': employee.fetchall(),
'task': task.fetchall(),
})
def csv_report_options(self):
res = super().csv_report_options()
res['fieldnames'].append('name')
res['fieldnames'].append('date')
res['fieldnames'].append('unit_amount')
res['fieldnames'].append('responsible')
res['fieldnames'].append('task')
res['delimiter'] = ';'
res['quoting'] = csv.QUOTE_ALL
return res
错误:
由于我不能发布图片,我只会发布一个gdrive链接
您应该在错误日志中看到以下错误消息:
ValueError: SQL query parameters should be a tuple, list or dict; ...
要修复该错误,请在元组中传递查询参数:
employee = self.env.cr.execute(query_str, (obj.employee_id.id, ))
不能传递obj.employee_id
(记录(,因为psycopg2
不能适应类型hr.employee
。
要获得员工姓名,只需使用点符号:
employee_name = obj.employee_id.name
两个查询都缺少from
子句,并且不能在employee
或task
上调用fetchall
,因为self.env.cr.execute将返回None
。要获取结果,请使用游标fetch*((方法。
self.env.cr.fetchall()