Python OpenERP-将数据复制到不同表中的新记录中-费用/POs

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 =

我一直试图将人力资源费用表中的某些字段复制到我的自定义模块“采购订单”中

以下方法是为我在扩展的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 = 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循环,这会使代码变得繁重


感谢

费用线是一个对象,您不能通过给点字段名从对象中获取价值