Вы должны использовать действия сервера, чтобы сделать это. Добавьте следующий код в файл XML в настраиваемой модуле:
<record id="change_state_action" model="ir.actions.server">
<field name="name">Change invoice state</field>
<field name="model_id" ref="model_account_invoice"/>
<field name="state">code</field>
<field name="code">
action = self.your_method_to_change_state(cr, user.id, context.get('active_ids', []), context=context)
</field>
</record>
<record id="change_state_option" model="ir.values">
<field name="name">Change invoice state</field>
<field name="key2" eval="'client_action_multi'"/>
<field name="model" eval="'account.invoice'"/>
<field name="value" eval="'ir.actions.server,%d'%change_state_action"/>
</record>
В code
поле, вы должны написать action = whatever python code you want
. Вы должны принять во внимание, что код Python должен вести себя так, как если бы вы работали в модели account.invoice
.
Таким образом, вы должны поместить этот код в файле Python в модуле:
class account_invoice(models.Model):
_inherit = 'account.invoice'
@api.multi
def your_method_to_change_state(self):
self.write({'state': 'XXXXX'})
Большое спасибо, это именно то, что мне нужно! Вы знаете, как перебирать все проверенные записи в древовидной структуре? Поэтому я могу написать что-то вроде для i в «всех выбранных записях»: i.write ({'state': 'draft'}) – Jesse
Вы будете получать все выбранные записи в переменной 'self' в Метод Python. Вы можете применять запись ко всем записям одновременно с тем, что я написал вам (это если вы хотите изменить каждую запись таким же образом). Но если нет, вы сможете сделать: 'для selected_record в self: selected_record.do_whatever_you_want' – forvas