奥多。 returns 列出的功能字段
Odoo. Function field that returns list
我们正在尝试创建呈现为列表的 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 在其他模块中 - 函数字段按预期工作并在模型初始化时执行。
2个字:在odoo 8中功能字段被计算字段取代。
因此,将模型代码更改为以下内容:
class sale_wizard(orm.TransientModel):
_name = 'account.bank.statement.review.wizard'
def _orders(self, cr, uid, ids, fields, arg, context=None):
res = {}
_statement = self.pool.get('account.bank.statement')
statement = _statement.browse(cr, uid, context.get('active_id', False), context=context)
_order_pool = self.pool.get('sale.order')
if statement:
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] = [(6, 0, _orders)]
return res
_columns = {
'order_ids': fields.many2many('sale.order', string="Sale Orders", compute='_orders'),
}
_defaults = {
#dirty trick to set values on wizard launch
'order_ids': lambda self, cr, uid, context : self._orders(cr, uid, [0], '', '', context)[0],
}
您的代码中存在一些问题。
1.定义功能字段时需要提供关系模型。这里的关系是sale.order。所以
_columns = {
'order_ids': fields.function(_orders, string="Sale Orders", type="many2many", relation='sale.order'),
}
函数字段的方法总是return一个字典。在您的情况下,由于未指定 'multi' 属性,因此方法应该 return 带有记录 ID 的字典,您已将功能字段添加为键并将结果添加为值。这里的值是销售订单列表ids.For示例。
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
我们正在尝试创建呈现为列表的 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 在其他模块中 - 函数字段按预期工作并在模型初始化时执行。
2个字:在odoo 8中功能字段被计算字段取代。
因此,将模型代码更改为以下内容:
class sale_wizard(orm.TransientModel):
_name = 'account.bank.statement.review.wizard'
def _orders(self, cr, uid, ids, fields, arg, context=None):
res = {}
_statement = self.pool.get('account.bank.statement')
statement = _statement.browse(cr, uid, context.get('active_id', False), context=context)
_order_pool = self.pool.get('sale.order')
if statement:
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] = [(6, 0, _orders)]
return res
_columns = {
'order_ids': fields.many2many('sale.order', string="Sale Orders", compute='_orders'),
}
_defaults = {
#dirty trick to set values on wizard launch
'order_ids': lambda self, cr, uid, context : self._orders(cr, uid, [0], '', '', context)[0],
}
您的代码中存在一些问题。 1.定义功能字段时需要提供关系模型。这里的关系是sale.order。所以
_columns = {
'order_ids': fields.function(_orders, string="Sale Orders", type="many2many", relation='sale.order'),
}
函数字段的方法总是return一个字典。在您的情况下,由于未指定 'multi' 属性,因此方法应该 return 带有记录 ID 的字典,您已将功能字段添加为键并将结果添加为值。这里的值是销售订单列表ids.For示例。
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