首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从Odoo8中的另一个函数字段中定义one2many字段的域?

在Odoo8中,可以通过在另一个函数字段中定义one2many字段的域。下面是一个示例:

代码语言:txt
复制
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)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • ODOO配置文件/etc/odoo.conf配置详解

    Odoo是一个多租户系统:一个Odoo系统可以运行并服务于多个数据库实例。它也是高度可定制的,定制(从加载的模块开始)取决于“当前数据库”。 作为登录公司用户使用后端(web客户端)时,这不是问题:登录时可以选择数据库,然后加载自定义设置。 但是,对于没有绑定到数据库的未登录用户(门户、网站)来说,这是一个问题:Odoo需要知道应该使用哪个数据库来加载网站页面或执行操作。如果没有使用多租户,这不是问题,只有一个数据库可以使用,但是如果有多个数据库可以访问,Odoo需要一个规则来知道它应该使用哪一个。 这是--db filter的目的之一:它指定如何根据所请求的主机名(域)选择数据库。该值是一个正则表达式,可能包括动态注入的主机名(%h)或访问系统所通过的第一个子域(%d)。 对于生产中托管多个数据库的服务器,特别是在使用网站时,必须设置dbfilter,否则许多功能将无法正常工作。

    03
    领券