Odoo v11: Как способствовать тому, чтобы поле было зависимым от стоимости другого поля dinámicamente?

Обладают тремя модулями:

class Modulo_A(models.Model):
    _name = 'modulo.a'
    name = fields.Char(description="Nombre A:")

class Modulo_B(models.Model):
    _name = 'modulo.b'
    name = fields.Char(description="Nombre B:")
    campo_a_ids = fields.Many2many('modulo.a')

class Modulo_C(models.Model):
    _name = 'modulo.c'
    name = fields.Char(description="Nombre C:")
    campo_a_ids = fields.Many2many('modulo.a')
    campo_b_id = fields.Many2one('modulo.b')

Хотят, чтобы в виде form Modulo_C campo_b_id выдали escojer campo_a_ids, а именно оказались одиноким ids, содержавшие в соответствующем Modulo_b.

0
задан 23.07.2019, 21:28
1 ответ

DespuГ©s 5 месяцев исследования, resolviГі этот вызов в continuaciГіn она explicaciГіn для нее versiГіn 10 и 11 из Odoo:

1. - Начиная с нее versiГіn 10 Odoo он не позволяет выполнять cГіdigo с файлов xml с нею funciГіn eval, а следовательно не является возможным сохранять поля dinГЎmicos в поле такой тип диаграмма как это hacГ - в в ней versiГіn 9, а следовательно необходимо сохранять их в поле many2many вычислено, которого dependerГЎ поле, которое давайте хотеть, чтобы у него был домен dinГЎmico. 1-ые

. - Сохранил в архиве Пайтон.

class Modulo_C(models.Model):
    _name = 'modulo.c'
    name = fields.Char(description="Nombre C:")
    campo_a_ids = fields.Many2many('modulo.a')

    # Campo auxiliar que guardara los id del domain dinámico
    campo_a_domain_ids = fields.Many2many(
        string="Domain del campo a",
        comodel_name="modulo.a",
        relation="modulo_c_to_modulo_a_domain",
        column1="modulo_c_id",
        column2="modulo_a_id",
        store=True,
        compute=lambda self: self._compute_campo_a_domain(),
    )
    campo_b_id = fields.Many2one('modulo.b')

    # Método del campo cumputado many2many
    @api.multi
    @api.depends("campo_b_id.campo_a_ids")
    def _compute_campo_a_domain(self):
        for rec in self:
            campo_a_list = []
            camp_a_ids = rec.campo_b_id.campo_a_ids
            campo_a_list = [x.id for x in camp_a_ids]
            rec.campo_a_domain_ids = [(6, 0, campo_a_list)]

    # El dominio debe cambiar si el campo b cambia así que
    # es necesario cambiar el método onchange
    @api.multi
    @api.onchange("campo_b_id")
    def _onchange_campo_b_id(self):
        # Obtenemos los ids del modulo a guardados en el b
        modulo_a_ids = self.campo_b_id.campo_a_ids.ids
        # Borramos de la vista los ids antiguos
        self.campo_a_ids = [(5, 0, 0)]
        # Insertamos el dominio dinamico nuevo
        vals['domain'] = {
        "campo_a_ids": [("id", "in", modulo_a_ids)],
        }
        # guardamos los ids del nuevo domain en el campo auxiliar
        self.campo_a_domain_ids = [(6, 0, modulo_a_ids)]
        return vals

1-b. - Я храню в архиве xml. - Мы соединяем зависимое поле (этот случай campo_a_ids) со вспомогательным полем для того, чтобы Ваш domain зависел от этого (campo_a_domain_ids), не забывать о том, что в campo_a_domain_ids он сохраняет ids их campo_a_ids сохраняемые в campo_b_id; Следовательно campo_a_ids закончись в зависимости от campo_b_id, и изменись dinГЎmicamente, если campo_b_id он меняется.

<field name="campo_a_domain_ids" invisible="1"/>
<field name="campo_a_ids" domain="[('id','in',eva_criteria_domain_ids)]"/>

, Если sirviГі ты не забыл дать ему botГіn наверху

0
ответ дан 02.12.2019, 06:29