我正在使用stock.move
模型。此模型有一个名为picking_type_id
的Many2one字段。我知道这不是最好的方法,但我使用attrs="{'invisible': [('picking_type_id', '=', 1)]}"
表达式来隐藏传入库存移动中的元素(我很确定传入的类型ID不会被修改)。
但是这个表达式只适用于表单视图,它不适用于树视图。如果元素是一个字段,这将是不可能的,但如果不是(例如一个按钮),它应该工作,不应该吗?
<field name="picking_type_id" invisible="0"/>
<button name="open_lots_manager_wizard"
string="Select lots" type="object"
icon="terp-accessories-archiver+"
attrs="{'invisible': [('picking_type_id', '=', 1)]}"
groups="stock.group_stock_user"/>
例如,如果我修改上面的attrs
表达式并将其转换为下面的表达式,它就可以工作(如果我设置的数量超过3,则按钮会消失,如果我在下面设置数量,它会再次显示等于3):
<field name="picking_type_id" invisible="0"/>
<button name="open_lots_manager_wizard"
string="Select lots" type="object"
icon="terp-accessories-archiver+"
attrs="{'invisible': [('product_uom_qty', '>', 3)]}"
groups="stock.group_stock_user"/>
有人能解释一下这个原因吗?我是否必须创建一个指向拾取类型代码的相关字段(例如)才能实现我的目的?
答案 0 :(得分:1)
我测试了你的代码并理解了问题。最好根据每个XML ID(stock.picking_type_in)获取对象,并将其与库存移动中的拾取类型进行比较。
我的解决方案看起来像这样。
<强> test_stock_move.py 强>
# -*- coding: utf-8 -*-
from openerp import models, fields, api, _
class stock_move(models.Model):
_inherit = "stock.move"
@api.multi
@api.depends("picking_type_id")
def _compute_incoming_type(self):
for o in self:
o.is_picking_type_incoming = (o.picking_type_id.id == self.env.ref("stock.picking_type_in").id)
is_picking_type_incoming = fields.Boolean(_("Is picking type incoming"),compute=_compute_incoming_type)
<强> stock_move_view.xml 强>
<record id="stock_move_tree" model="ir.ui.view">
<field name="name" >stock.move.form</field>
<field name="model">stock.move</field>
<field name="inherit_id" ref="stock.view_move_tree" />
<field name="arch" type="xml">
<xpath expr="//field[@name='state']" position="after">
<field name="is_picking_type_incoming"/>
<button name="open_lots_manager_wizard"
string="Select lots" type="object"
icon="terp-accessories-archiver+"
attrs="{'invisible': [('is_picking_type_incoming', '=', True)]}"
groups="stock.group_stock_user"/>
</xpath>
</field>
</record>
我在is_picking_type_incoming
模型中添加了一个新的计算字段stock.move
。这适用于我的情况。希望它能解决你的问题。