Python OpenERP-将数据复制到不同表中的新记录中-费用/POs
我一直试图将人力资源费用表中的某些字段复制到我的自定义模块“采购订单”中 以下方法是为我在扩展的hr_expenses.py文件中编写的:Python OpenERP-将数据复制到不同表中的新记录中-费用/POs,python,python-2.7,openerp,openerp-7,odoo,Python,Python 2.7,Openerp,Openerp 7,Odoo,我一直试图将人力资源费用表中的某些字段复制到我的自定义模块“采购订单”中 以下方法是为我在扩展的hr_expenses.py文件中编写的: def po_generator(self, cr, uid, ids, arg, context=None): res = {} for expense in self.browse(cr, uid, ids, context=context): expense_line =
def po_generator(self, cr, uid, ids, arg, context=None):
res = {}
for expense in self.browse(cr, uid, ids, context=context):
expense_line = self.pool.get('hr.expense.line')
purchase_orders = self.pool.get('purchase.orders')
for line in expense.line_ids:
expense_line_record = expense_line.search(cr, uid, [('id', '=', line.id)], context=context)
# pdb.set_trace()
purchase_orders.create(cr, uid,
{
'submitted_employee_name':expense.employee_id,
'dateofexpense':expense_line.date_value,
'project_id_expense':expense_line.project_id,
'Description':expense_line.name,
'netamount':expense_line.product_exc_VAT,
'raised_employee_name':expense.employee_id,
'project_id_account_type':expense_line.project_id_account_type,
},
context
)
return res
但是,当我尝试执行这段代码时,OpenERP会给我一个带有回溯的“AttributeError”:
文件
“/opt/openerp/custom_modules/legacy_expense\u po/legacy_expense.py”,
第121行,在po_发电机中
“dateofexpense”:费用\u line.date\u值,AttributeError:“hr.expense.line”对象没有属性“date\u值”
我想这与费用表单中的line_id字段有关。我正在尝试获取行ID中的每一行,并将其作为新记录输入采购订单表中
谢谢。@Sagar Mohan
你犯了一个基本的错误
您已经在浏览记录上循环说语句了
for line in expense.line_ids:
当您说expense.line\u id
时,这将已经拉取所有相关的o2m记录,您不需要通过编写语句expense\u line\u record=expense\u line.search(cr,uid,[('id','=',line.id)],context=context再次搜索)
您必须知道,v7中的搜索只返回匹配id的整数id,而不是记录集
或浏览记录
。
正确的代码是:
def po_generator(self, cr, uid, ids, arg, context=None):
res = {}
purchase_orders = self.pool.get('purchase.orders')
for expense in self.browse(cr, uid, ids, context=context):
expense_line = self.pool.get('hr.expense.line')
purchase_orders = self.pool.get('purchase.orders')
for line in expense.line_ids:
purchase_orders.create(cr, uid,
{
'submitted_employee_name':line.employee_id.name,
'dateofexpense': line.date_value,
'project_id_expense': line.project_id.id,
'Description': line.name,
'netamount': line.product_exc_VAT,
'raised_employee_name': expense.employee_id.name,
'project_id_account_type': line.project_id_account_type,
},
context
)
return res
这段代码可能需要根据您的需要进行修改,但您可以看到该行是direct browse变量,所以您只需要修改它。并进入现场
这里还有一点需要注意,您永远不会使用self.pool.get-inside循环,这会使代码变得繁重
感谢费用线是一个对象,您不能通过给点字段名从对象中获取价值