Проблема с редактированием вычисляемого поля Odoo 11 One2many

Когда я редактирую запись из этого поля (код ниже), она по какой-то причине не сохраняется. Это вычисляемое поле, связанное с записями res.partner. Если я отредактирую его и нажму кнопку "Сохранить", он не будет сохранен вообще (без изменений в базе данных и / или если я обновлю страницу жестко). Здесь кто-то видит что-то, чего мне не хватает? Если я не могу отредактировать его с помощью того, что я ожидаю, есть ли другой способ сделать это? Причина, по которой я делаю вычисляемое поле, а не домен для child_ids, заключается в том, что поле child_ids с доменом, похоже, не работает должным образом с этим доменом.

модель

contact_ids = fields.One2many(comodel_name='res.partner', compute="_get_contact_ids", readonly=False)

@api.multi
@api.depends('child_ids')
def _get_contact_ids(self):
    for company in self:
        if company.child_ids:
            company.contact_ids = company.child_ids.search([('is_location', '=', False), ('parent_id', '=', company.id), ('type', '=', 'contact')])

Посмотреть

<field name="contact_ids" string="Contacts">
    <tree create="true" delete="false" edit="true" default_order="create_date">
        <field name="name"/>
        <field name="phone"/>
        <field name="email"/>
    </tree>
</field>

Обновить

Добавил это за идеи, но это не сработало. Имейте в виду, что это модель, которая наследует res.partner.

activity_contact_id = fields.Many2one('res.partner', string="Contact")
contact_ids = fields.One2many(
    comodel_name='res.partner',
    inverse_name='activity_contact_id',
    compute="_get_contact_ids",
    readonly=False,
    stored=True
)

2 ответа

Вычисленные поля в Odoo не сохраняются по умолчанию, вам нужно установить store=True, чтобы сохранить поля в базе данных.

contact_ids = fields.One2many(comodel_name='res.partner', compute="_get_contact_ids", stored=True, readonly=False)

Хранить one2many значение в базе данных вам нужно inverse_name с другой model, Я имею в виду, что вам нужно создать many2one поле для сохранения id текущей записи в co_model, (o2m нуждается в m2o, вы не можете хранить значения без m2o!! запомните эту роль)

не использовать one2many полевое использование many2many поле лучше.

   contact_ids = fields.Many2many(comodel_name='res.partner',
                                  relation="your_model_res_partner_rel", # always mention the name of the relation good practice
                                  column1 = "you_mode_id",
                                  column2 = "partner_id",
                                 compute="_get_contact_ids",
                                 store=True) # make your field stored no need for readonly it's by default

   @api.depends('child_ids')
   def _get_contact_ids(self):
        """ always explain what the method do here good practice for team work"""
        for company in self:
            if company.child_ids:
                # break you line when it's to long to be readable
                ids = company.child_ids.search([('is_location', '=', False),
                                                ('parent_id', '=', company.id),
                                                ('type', '=', 'contact')]).ids
                company.contact_ids = [(6, False, ids)] # replace all records by the new ids
Другие вопросы по тегам