OpenERP 7: Почему унаследованное представление не отображается?

Я пытаюсь переопределить кнопку Deliver в представлении заказов на доставку (например, stock.picking.out) и кнопку в соответствующем мастере (например, stock.partial.picking).

Для этого я создал специальный модуль: compose_delivery_order.

deliver_button.xml

как суть

<data>
    <!-- override: stock/wizard/stock_partial_picking_view.xml -->
    <record id="stock_partial_picking_delivery_form" model="ir.ui.view">
        <field name="name">compose_delivery_order.stock_partial_picking_delivery_form</field>
        <field name="model">stock.partial.picking</field>
        <field name="priority" eval="15"/>
        <field name="inherit_id" ref="stock.stock_partial_picking_form"/>
        <field name="arch" type="xml">
            <xpath expr="/form/footer//button[@name='do_partial']" position="replace">
                <button
                        name="do_partial"
                        string="picking delivery"
                        type="object"
                        class="oe_highlight"
                />
            </xpath>
        </field>
    </record>

    <!-- override: sale_stock/sale_stock_view.xml -->
    <record id="view_delivery_form" model="ir.ui.view">
        <field name="name">stock.picking.out.form</field>
        <field name="model">stock.picking.out</field>
        <field name="inherit_id" ref="stock.view_picking_out_form"/>
        <field name="view_id" ref="stock_partial_picking_delivery_form"/>
        <field name="arch" type="xml">
            <xpath expr="/form/header//button[@name='action_process']" position="replace">
                <button name="action_process" states="assigned" string="[Deliver]" type="object"
                        class="oe_highlight"/>
            </xpath>
        </field>
    </record>
</data>

Проблема

Кнопка на stock.picking.out правильно заменяется, а на stock.partial.picking нет. Когда я проверяю информацию Управление представлениями, я получаю:

обнаружено, но не используется

Таким образом, мое представление обнаружено, но не выбрано в качестве представления по умолчанию.

Вопрос

Как я могу заставить использовать мое представление?


person Édouard Lopez    schedule 22.03.2016    source источник


Ответы (2)


В Odoo есть 2 способа ссылки на представления:

  1. если представление запрашивается (моделью, типом), сопоставляется представление с правильной моделью и типом, режим = первичный и самый низкий приоритет
  2. когда представление запрашивается по идентификатору, если его режим не является первичным, его ближайший родитель с первичным режимом соответствует

Если ваше представление запрашивается по приоритету, попробуйте установить приоритет на более низкое значение.

person Motez    schedule 22.03.2016
comment
Как видите, я уже пытался изменить приоритет, но безуспешно. - person Édouard Lopez; 23.03.2016
comment
присвойте ему более низкое значение 5, например, вместо 15. поскольку самый низкий приоритет - тот, который соответствует - person Motez; 23.03.2016
comment
см. мой ответ, в моем случае это не имело никакого отношения к приоритету, поскольку кнопка была переопределена в коде Python. - person Édouard Lopez; 24.03.2016
comment
Я понимаю. Затем вам нужно определить новое действие для вашего представления, а затем вызвать новое действие с помощью кнопки - person Motez; 24.03.2016

После долгих поисков, проб и ошибок я наконец обнаружил, что кнопка для данного представления была переопределена в коде Python.

Поэтому, чтобы изменить кнопку, мне пришлось переопределить метод в моем модуле.

# override: stock/wizard/stock_partial_picking.py
class stock_partial_picking(osv.osv_memory):
    _inherit = 'stock.partial.picking'
    _rec_name = 'picking_id'
    _description = "Partial Picking Processing Wizard"

    def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
        # override of fields_view_get in order to change the label of the process button and the separator accordingly to the shipping type
        if context is None:
            context = {}
        res = super(stock_partial_picking, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type,
                                                                 context=context, toolbar=toolbar, submenu=submenu)
        type = context.get('default_type', False)
        if type:
            doc = etree.XML(res['arch'])
            for node in doc.xpath("//button[@name='do_partial']"):
                if type == 'in':
                    node.set('string', _('_Receive'))
                elif type == 'out':
                    node.set('string', _('[_Deliver]'))
            for node in doc.xpath("//separator[@name='product_separator']"):
                if type == 'in':
                    node.set('string', _('Receive Products'))
                elif type == 'out':
                    node.set('string', _('Deliver Products'))
            res['arch'] = etree.tostring(doc)
        return res
person Édouard Lopez    schedule 23.03.2016