Как закодировать обновление для расширенного поля, используя действие сервера на Odoo 11?

1

Я изучаю 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"

Любая помощь приветствуется. Заранее спасибо.

  • 0
    Не уверен, в каком классе находится ваш метод x_nc_met_fac, но если он унаследован в классе account.invoice и у вас есть кнопка объекта, он должен работать
Теги:
odoo
odoo-11

1 ответ

0
Лучший ответ

name кнопки должно быть идентификатором действия. Так что нужно подумать, что нужно сделать:

  1. Ваше действие должно быть определено перед кнопкой. Если оба находятся в одном и том же xml, легко, если не проверить порядок в манифесте модуля. XML файлы будут загружены в этом порядке!

  2. Измените name кнопки на "внешнюю замену идентификатора"

<button name="%(x_nc_act_serv_fact)d" type="action" string="Homologar"
    attrs="{'invisible':['|',('sent','=',True), ('state', 'not in', ('open','paid'))]}"/>
  • 0
    БОЛЬШОЕ СПАСИБО! ТЫ БОГ! Но на самом деле ваш ответ был частично правильным. После исправления кнопки xml мне тоже пришлось исправить свой метод. Так как «цикл for», который я определил, должен быть внутри метода: P Затем я должен был упорядочить все, что у меня было в моем view.xml. Odoo не говорит вам этого в документации. Поэтому я посмотрел на их дополнения и увидел, что каждый тип объекта находится в отдельном .xml. Каждый тип представления, тип действий, тип меню находятся в отдельных XML-файлах, а затем вызывается в манифесте. Я понятия не имел об этом, но это решило мою проблему, и теперь это работает как шарм!
  • 0
    Я только искал кнопку ;-) и что-то есть в документации, например, здесь . Приятно знать, что теперь все решено :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню