我们正在尝试创建显示为列表的odoo函数字段。
我们遵循以下模型:
class sale_wizard(orm.TransientModel):
_name = 'account.bank.statement.review.wizard'
def _orders(self, cr, uid, ids, fields, arg, context=None):
statement = self.env['account.bank.statement'].browse(self._context.get('active_id'))
partner_id = statement.partner_id.id
sale_orders = self.pool.get('sale.order').search(cr, uid, [
('partner_id', '=', partner_id),
])
print 'hiro'
print sale_orders
return [(1,2,3), (1,2,3)]
_columns = {
'order_ids': fields.function(_orders, string="Sale Orders", type="many2many"),
}
我们有以下观点:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Wizard Form -->
<record model="ir.ui.view" id="orders_review_form">
<field name="name">Sale Orders Review</field>
<field name="model">account.bank.statement.review.wizard</field>
<field name="arch" type="xml">
<form string="Sale Orders Test">
<group col="2">
<field name="order_ids" />
</group>
</form>
</field>
</record>
</data>
</openerp>
当我打开表单时,其中包含视图-它呈现为空列表。和线
print 'hiro'
print sale_orders
不要执行。因此,功能字段order_ids
不执行功能orders
。
在哪里挖?
UPD在其他模块中-功能字段按预期工作,并在模型初始化时执行。
python大神给出的解决方案
您的代码中存在一些问题。
1.定义功能字段时,需要提供关系模型。这里的关系是sale.order。所以
_columns = {
'order_ids': fields.function(_orders, string="Sale Orders", type="many2many", relation='sale.order'),
}
功能域的方法总是返回字典。在这种情况下,由于未指定“ multi”属性,因此该方法应返回一个记录为id的字典,其中已将功能字段添加为键,并将结果添加为值。例如,此处的值是销售订单ID的列表。
def _orders(self, cr, uid, ids, fields, arg, context=None):
res = {}
for _obj in self.browse(cr, uid, ids, context=context):
_orders = _order_pool.search(cr, uid, [('partner_id', '=', statement.partner_id.id), ], context=context)
res[_obj.id] =_orders
return res