如何模仿stock.picking.type看板视图的行为?

时间:2017-12-18 14:01:44

标签: xml openerp odoo-8

  

目的

我正在尝试开发类似于您可能使用的菜单项(如果您安装了stock模块)。如果你去仓库>操作>所有操作,您将看到stock.picking.type模型的漂亮看板视图以及可用的拣货类型。如果您单击任何拣配类型框的所有操作链接,您将被重定向到stock.picking树视图。嗯,这是我唯一需要的东西,但是,我希望链接能够将您重定向到我的自定义stock.move树。

所以,我已经创建了我的menuitem,以及我自己的stock.picking.type看板视图,该视图将重定向到我的自定义stock.move树视图。

  

我的代码

我的看板视图

<record id="stock_picking_type_2_move_kanban" model="ir.ui.view">
    <field name="name">stock.picking.type.2.move.kanban</field>
    <field name="model">stock.picking.type</field>
    <field name="priority" eval="20"/>
    <field name="arch" type="xml">
        <kanban class="oe_background_grey" create="0">
            <field name="complete_name"/>
            <field name="color"/>
            <templates>
                <t t-name="kanban-box">
                    <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_stock_picking_type">
                        <div class="oe_kanban_content">
                            <h4 class="text-center"><strong><field name="complete_name"/></strong></h4>
                            <div class="oe_items_list oe_kanban_ellipsis">
                                <div>
                                    <a name="%(action_in_alt_move_views)d" type="action">Open moves</a>
                                </div>
                            </div>
                        </div>
                    </div>
                </t>
            </templates>
        </kanban>
    </field>
</record>

我的操作会打开我的看板(以及默认形式stock.picking.type

<record id="action_in_alt_picking_type_views" model="ir.actions.act_window">
    <field name="name">Picking types</field>
    <field name="res_model">stock.picking.type</field>
    <field name="type">ir.actions.act_window</field>
    <field name="view_type">form</field>
    <field name="view_mode">kanban,form</field>
    <field name="search_view_id" ref="stock.view_pickingtype_filter"/>
    <field name="help" type="html">
        <p class="oe_view_nocontent_create">
        Click to create a new picking type. 
        </p><p>
        The picking type system allows you to assign each stock
        operation a specific type which will alter its views accordingly.  
        On the picking type you could e.g. specify if packing is needed by default, 
        if it should show the customer.  
        </p>
    </field>
</record>

<record id="action_in_alt_picking_type_kanban" model="ir.actions.act_window.view">
    <field name="view_mode">kanban</field>
    <field name="view_id" ref="poc_alternative_stock.stock_picking_type_2_move_kanban"/>
    <field name="act_window_id" ref="action_in_alt_picking_type_views"/>
</record>

<record id="action_in_alt_picking_type_form" model="ir.actions.act_window.view">
    <field name="view_mode">form</field>
    <field name="view_id" ref="stock.view_picking_type_form"/>
    <field name="act_window_id" ref="action_in_alt_picking_type_views"/>
</record>

我的菜单

<menuitem action="action_in_alt_picking_type_views"
    id="menu_action_in_alt_move_views"
    parent="stock.menu_stock_warehouse_mgmt" sequence="4"/>
  

THE BEHAVIOR

当我点击我的menuitem时,我得到了不同的错误,他们中的大多数都告诉我这个字段不存在。问题是所有这些字段都属于我为stock.move模型制作的搜索视图。而且我不知道为什么在我的stock.picking.type操作中加载了此搜索视图,因此Odoo正在尝试使用stock.move的搜索视图显示我的看板视图。这就是错误的原因。如果我评论搜索视图的每个字段,我会收到此错误:

raise ValueError("Invalid field %r in leaf %r" % (left, str(leaf)))
ValueError: Invalid field 'state' in leaf "<osv.ExtendedLeaf: ('state', '=', 'draft') on stock_picking_type (ctx: )>"

我的stock.move搜索视图的第一个过滤器的域名。

为什么Odoo会尝试加载该搜索视图? (如果您看到我的操作代码,我甚至包含了参数search_view_id,尝试加载stock.picking.type的默认搜索视图,而不是stock.move一个。

而且更令人惊讶的是,如果我修改了我的stock.picking.type看板视图的优先级,例如写了16,那么它将比原来的更优先(在stock模型中声明),现在再次点击 Warehouse&gt;操作&gt;所有操作,我的看板视图已加载。但是,嘿,这里正确加载,它完美无缺,完全符合我的要求,看板视图也可以,搜索视图也一样,链接重定向到我想要的stock.move视图...

有谁能解释一下我在这里发生了什么?

1 个答案:

答案 0 :(得分:0)

从您的代码的外观来看,您没有任何域('state', '=', 'draft')我假设当您在代码中午餐时第一次在您的操作代码中有一个。当你有错误时,你删除它。并且在XML中删除代码不会更新数据库中的数据。

  <!-- you must tell Odoo empty the field first and next time 
       remove the code(in production) when odoo load some thing to database
       like context, domain, any other value clear it first then remove
       the code -->
  <fied name="domain">[] </field> 

当您在xml中出现错误时,请先尝试记住在从数据库中清除之前删除的代码。