Проблема с редактированием вычисляемого поля 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