小豆返回列表的功能字段 - python

我们正在尝试创建显示为列表的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