Я изучаю Odoo 11 и хочу закодировать кнопку, которая вызовет метод python с помощью действия сервера.
Здесь мой код кнопки:
<button name="enviarfactura" type="action" string="Homologar" attrs="{'invisible':['|',('sent','=',True), ('state', 'not in', ('open','paid'))]}"/>
Здесь мой код action.server
<record model="ir.actions.server" id="x_nc_act_serv_fact">
<field name="name">enviarfactura</field>
<field name="model_id" ref="model_account_invoice"/>
<field name="sequence">1</field>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
if records:
action = records.x_nc_met_fac()
</field>
</record>
И, наконец, здесь мой метод python.
@api.multi
def x_nc_met_fac(self):
for rec in self:
self.x_nc_fld_fact = True
self.x_nc_fld_det_fact = 'my custom text'
Теперь логика этого заключается в том, что кнопка вызовет server.action, который вызовет метод в моем классе python. Метод будет устанавливать новые значения для расширенных полей в модели account.invoice. В теории это должно работать, но это не так.
Отбрасывание возможных ошибок:
-It не может быть отступом python. Сообщество python по разлад помогает мне в этом: P -It не структура server.action, так как при загрузке моего модуля, содержащего этот код, он создает server.action без каких-либо проблем. -When Я нажимаю на кнопку, ничего не происходит. Поэтому я попытался изменить тип кнопки на "type=object"
и сообщить ей имя моего метода, в котором она дает ошибку. У Account.invoice нет атрибута "x_nc_met_fac"
Любая помощь приветствуется. Заранее спасибо.
name
кнопки должно быть идентификатором действия. Так что нужно подумать, что нужно сделать:
Ваше действие должно быть определено перед кнопкой. Если оба находятся в одном и том же xml, легко, если не проверить порядок в манифесте модуля. XML файлы будут загружены в этом порядке!
Измените name
кнопки на "внешнюю замену идентификатора"
<button name="%(x_nc_act_serv_fact)d" type="action" string="Homologar"
attrs="{'invisible':['|',('sent','=',True), ('state', 'not in', ('open','paid'))]}"/>