Odoo 8 (Openerp): установка значений с помощью мастера из списка
У меня возникли некоторые проблемы с мастером Odoo в представлении списка, которое могло бы принять значение из выбранных (отмеченных) элементов списка для обновления другой записи. Например, я добавил столбец res_partner с именем related_partner_id. По сути, он используется для классификации основных учетных записей (партнеров). При добавлении нового клиента я настроил раскрывающийся список, в котором я мог бы назначить основную учетную запись. База данных обновляет related_partner_id до идентификатора дочерней учетной записи из res_partner.
Вот вид, который я использую.
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!--Wizard view to assign new master account-->
<record model="ir.ui.view" id="view_master_wizard_form">
<field name="name">master.wizard.form</field>
<field name="model">master.wizard</field>
<field name="arch" type="xml">
<form string="Assign New Parent">
<separator colspan="4" string="Update Parent"/>
<newline/>
<field name="related_partner_id"/>
<field name="parent_id" invisible="1"/>
<group col="4" colspan="4">
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
<button icon="gtk-ok" name="change_master" string="Update" type="object"/>
</group>
</form>
</field>
</record>
<!--Add option to More dropdown in customer list viewt-->
<act_window id="launch_res_partner" name="Assign New Master"
src_model="res.partner"
res_model="master.wizard"
view_mode="form"
view_type="form"
target="new"
key2="client_action_multi"/>
<!--Action to change selected customers to the new master account-->
<record id="action_change_master" model="ir.actions.act_window">
<field name="name">Assign New Master Account</field>
<field name="type">ir.actions.act_window</field>
<field name="src_model">res.partner</field>
<field name="res_model">master.wizard</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</data>
Я следовал / основал это от руководства Odoo Wizard здесь. Я вижу, как он записывает записи в таблицу master_wizard в базу данных (хотя только одну, независимо от того, сколько я проверяю), но она не обновляет таблицу res_partner.
1 ответ
Вот класс модели, который работает с вышеуказанным XML. Просто нужно пройтись по идентификаторам и установить значение из собственного значения в мастере в таблицу res.partner. Это все новый API. Возможно, его нужно немного подправить, но пока работает нормально. Я должен был установить parent_id, так как это тоже нужно было изменить.
from openerp import models, fields, api
class master_wizard(models.TransientModel):
_name = 'master.wizard'
related_partner_id = fields.Many2one('res.partner', 'Master Account')
parent_id = fields.Many2one('res.partner')
related_partner_ids = fields.One2many('res.partner', 'related_partner_id')
@api.multi
def change_master(self):
related_partner_ids = self.env['res.partner'].browse(self._context.get('active_ids'))
for partner in related_partner_ids:
partner.related_partner_id = self.related_partner_id
partner.parent_id = self.related_partner_id
return {}