在Odoo8中,可以通过在另一个函数字段中定义one2many字段的域。下面是一个示例:
from openerp import models, fields, api
class ModelA(models.Model):
_name = 'model.a'
name = fields.Char(string='Name')
model_b_ids = fields.One2many(comodel_name='model.b', inverse_name='model_a_id', string='Model B')
@api.multi
def compute_model_b_ids(self):
for record in self:
# 根据需要的条件筛选model.b记录
domain = [('field_name', '=', record.name)]
model_b_records = self.env['model.b'].search(domain)
record.model_b_ids = [(6, 0, model_b_records.ids)]
class ModelB(models.Model):
_name = 'model.b'
name = fields.Char(string='Name')
model_a_id = fields.Many2one(comodel_name='model.a', string='Model A')
在上面的示例中,我们有两个模型:ModelA和ModelB。ModelA具有一个名为model_b_ids
的one2many字段,它与ModelB相关联。我们在ModelA中定义了一个名为compute_model_b_ids
的函数字段,它用于计算model_b_ids
字段的域。
在compute_model_b_ids
函数中,我们可以根据需要的条件筛选ModelB记录,并将结果赋值给model_b_ids
字段。在这个例子中,我们使用了一个简单的条件field_name = record.name
,你可以根据实际需求进行修改。
请注意,我们使用了[(6, 0, model_b_records.ids)]
来更新model_b_ids
字段。这是Odoo中用于更新one2many字段的特殊语法。其中,6表示替换所有现有的关联记录,0表示不添加新的关联记录,model_b_records.ids
是要关联的记录的ID列表。
这样,当ModelA的name
字段发生变化时,compute_model_b_ids
函数将自动计算并更新model_b_ids
字段的域。
推荐的腾讯云相关产品:腾讯云服务器(https://cloud.tencent.com/product/cvm)
领取专属 10元无门槛券
手把手带您无忧上云