ОДОО 8 on_change

Пожалуйста, я столкнулся с некоторыми проблемами с новым API odoo 8, у меня есть следующие классы

class TypeProcessus(models.Model):
    _name = 'atom.promaintenance.type.processus'
    name = fields.Char()
    id_phases = fields.One2many('atom.promaintenance.phases','id_processus','Liste des Phases')

class Phases(models.Model):
    _name = 'atom.promaintenance.phases'
    name = fields.Char()
    autoriserCommentaire = fields.Boolean()
    autoriserPiecesJointes = fields.Boolean()
    id_processus = fields.Many2one('atom.promaintenance.type.processus')
    parent_id = fields.Many2one('atom.promaintenance.phases','Phase Parent', select=True,      ondelete='cascade')
    commentaire = fields.Text()

    @api.one
    @api.onchange('name')
    def phases_write(self):
      print 'test'

<record model="ir.ui.view" id="atom_promaintenance_type_processus">
<field name="name">atom.promaintenance.type.processus.form</field>
<field name="model">atom.promaintenance.type.processus</field>
<field name="type">form</field>
<field name="arch" type="xml">

        <form string="Type Processus" >
            <sheet>
            <h1>UPDATED</h1>
                <field name="name" />
                    <tree string="note_evaluation_tree" editable="bottom">
                        <field name="id_phases"  />
                    </tree>
            </sheet>
        </form>

</field>
</record>

Прежде всего, моя проблема заключается в том, что при создании нового процесса и добавлении фаз между фазами существует связь между родительским и дочерним элементами, а раскрывающийся список для родительского элемента остается пустым, если вы не сохраните процесс, чтобы сделать их доступными.

мне удалось добавить событие onChange в фазы, чтобы сохранить их в базе данных, но я не могу понять, как сохранить эти записи с новой системой API, спасибо


person Jacklapott    schedule 03.11.2014    source источник
comment
Вы не можете использовать методы onchange для сохранения записей. Я не очень понимаю, что вы хотите здесь сделать. Если вы хотите изменить способ сохранения/создания записей, вы должны переопределить методы create и/или write или вызвать их в своих методах, если вам нужно создать/обновить некоторые связанные записи.   -  person Andrius    schedule 24.02.2015
comment
я не могу найти вашу проблему, какова связь между onChange() и записью хранилища? так что вы говорите, что на самом деле проблема   -  person Virbhadrasinh    schedule 23.04.2015


Ответы (2)


Если вы имеете в виду то, что я понимаю, вам нужно использовать виджет one2many_list в XML-коде, что, кстати, я считаю неправильным. Это должно быть что-то вроде этого:

<record model="ir.ui.view" id="atom_promaintenance_type_processus">
    <field name="name">atom.promaintenance.type.processus.form</field>
    <field name="model">atom.promaintenance.type.processus</field>
    <field name="type">form</field>
    <field name="arch" type="xml">
        <form string="Type Processus" >
            <sheet>
            <h1>UPDATED</h1>
                <field name="name" />
                <field name="id_phases" widget="one2many_list">
                    <tree string="note_evaluation_tree" editable="bottom">
                        <field name="name"/>
                        <field name="autoriserCommentaire"/>
                        <field name="autoriserPiecesJointes"/>
                        <field name="parent_id"/>
                        <field name="commentaire"/>
                    </tree>
                </field>
            </sheet>
        </form>
    </field>
</record>

Виджет позволит вам добавлять фазы для процесса, а затем сохранять их.

person forvas    schedule 22.05.2015

Новый API использует self для всех модификаций записей. Итак, в вашем случае, если вы хотите изменить name, напишите так:

@api.one
@api.onchange('name')
def onchange_name(self):
    self.name = 'what you want to save'
person Eivydas Vilčinskas    schedule 22.02.2016