当我从此字段编辑记录时(下面的代码),由于某种原因它不会保存。它是一个计算字段,链接到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
)
答案 0 :(得分:1)
默认情况下不存储Odoo中的计算字段,您需要设置store = True才能将字段保存到数据库。
contact_ids = fields.One2many(comodel_name='res.partner', compute="_get_contact_ids", stored=True, readonly=False)
答案 1 :(得分:1)
要在数据库中存储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