Odoo 10: не могу вызвать мою функцию Python из пункта меню - PullRequest
0 голосов
/ 12 сентября 2018

Вот мой view.xml:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
  <data>
<record id="view_sim" model="ir.actions.server">

            <field name="name">Details</field>
             <field name="model_id" ref="model_test" />   
            <field name="condition">True</field>

            <field name="type">ir.actions.server</field>

            <field name="state">code</field>

            <field name="code">self.on_test()</field>

    </record>

    <record model="ir.actions.act_window" id="view_sim">
        <field name="name">Details</field>
        <field 
         name="res_model">test</field>
        <field name="view_type">form</field>
        <field name="limit">100</field>
        <field name="view_mode">tree,form</field>
        <field name="domain">[]</field>
        <field name="help" type="html">
            <p class="oe_view_nocontent_create">Create new
            </p>
        </field>
</record>


    <!-- Top menu item -->
     <menuitem id="root.menu_root" name="card"/>
     <!-- menu categories -->
        <menuitem id="sim" name="Sim" parent="root.menu_root" action="view_sim"/>

  </data>
</odoo>

Вот моя функция python в models.py:

def on_test(self):
          _logger.error("test")

Я не могу вызвать эту функцию, когда нажимаю на пункт меню. Я получаю сообщение об ошибке:

ValueError: <type 'exceptions.NameError'>: "name 'self' is not defined" while evaluating
u'self.on_test()

Это правильный способ вызова функции в odoo 10? Как я могу вызвать свою функцию или определить себя в views.xml?

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Вы можете создать ir.actions.server или простые Действия Сервера в технической части Odoo. Это имеет несколько интересных преимуществ для начинающих: немного документации. Ниже приведена копия из Odoo 10 и показана небольшая документация, которую вы получаете при создании действия сервера кода Python:

# Available variables:
#  - time, datetime, dateutil, timezone: Python libraries
#  - env: Odoo Environement
#  - model: Model of the record on which the action is triggered
#  - record: Record on which the action is triggered if there is one, otherwise None
#  - records: Records on which the action is triggered if there is one, otherwise None
#  - log : log(message), function to log debug information in logging table
#  - Warning: Warning Exception to use with raise
# To return an action, assign: action = {...}

И вы выходите из меню, поэтому Odoo не знает ни о каких записях. Просто используйте model.on_test(), как уже написано в PROTOCOL. Вы также должны украсить свой метод с помощью @api.model, чтобы сообщить Odoo, что в вызове этого метода нет никаких записей.

0 голосов
/ 12 сентября 2018

Полезная ссылка, где вы можете найти документацию о доступных опциях в контексте оценки действий сервера Odoo

http://www.odoo.com/documentation/10.0/reference/actions.html#reference-actions-server-context

0 голосов
/ 12 сентября 2018

Попробуйте это, вместо

<field name="code">self.on_test()</field>

измените на

<field name="code">model.on_test()</field>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...