将按钮'action_open_quants'添加到继承的'product.template'模型 - Odoo v8

时间:2017-08-17 04:59:28

标签: python python-2.7 openerp odoo-8

我班上有这些字段:

class bsi_production_order(models.Model):
    _name = 'bsi.production.order'
    _inherit = ['mail.thread','text.paper','product.template']

    product_id = fields.Many2one('product.template', string="Product")
    qty_available = fields.Float(string="Qty Available", related="product_id.qty_available")

最初,在stock模块上你有这个功能:

class product_template(osv.osv):
    _name = 'product.template'
    _inherit = 'product.template'

    def action_open_quants(self, cr, uid, ids, context=None):
        products = self._get_products(cr, uid, ids, context=context)
        result = self._get_act_window_dict(cr, uid, 'stock.product_open_quants', context=context)
        result['domain'] = "[('product_id','in',[" + ','.join(map(str, products)) + "])]"
        result['context'] = "{'search_default_locationgroup': 1, 'search_default_internal_loc': 1}"
        return result

由于我在自定义模块上继承了product.template,我想在我的视图中显示这个相同的函数,所以我只是这样声明:

<field name="product_id"/>
<field name="qty_available"/>
<button class="oe_stat_button"
    name="action_open_quants"
    icon="fa-building-o"
    type="object">

最初(在stock模块上),它被声明为:

<button class="oe_stat_button"
    name="action_open_quants"
    icon="fa-building-o"
    type="object"  attrs="{'invisible':[('type', '=', 'service')]}" groups="stock.group_locations">
    <div><field name="qty_available_text"/></div>
</button>

目前,它部分正常工作,因为我可以想象与我从Many2one及相关领域中选择的产品相关的数量,但它与我在视图中选择的产品无关。

那么,有没有办法让它完全像stock模块那样工作?

我希望我已经解释过了。

1 个答案:

答案 0 :(得分:1)

您可以修改模块中的_get_products功能,以返回要在quants视图中显示的产品。我要做的一种方法是使用context将product_id传递给_get_products函数

在你看来:

<field name="product_id" context="{'product_tmpl_id': product_id}"/>

_get_products函数中:

def _get_products(self, cr, uid, ids, context=None):
    products = []
    context = context or {}
    product_tmpl_id = context.get('product_tmpl_id', False)
    if product_tmpl_id:
        prodtmpl = self.pool.get('product.template').browse(cr, uid, product_tmpl_id, context=None)
        if prodtmpl:
            products += [x.id for x in prodtmpl.product_variant_ids]
    else:
        products = #... call super here
    return products