根据odoo中一个Many2one字段的值过滤另一个字段可以通过定义一个compute函数来实现。下面是一个示例的代码和解释:
class MyModel(models.Model):
_name = 'my.model'
many2one_field = fields.Many2one('other.model', string='Many2one Field')
filtered_field = fields.Many2one('other.model', string='Filtered Field',
compute='_compute_filtered_field')
@api.depends('many2one_field')
def _compute_filtered_field(self):
for record in self:
# 根据many2one_field的值过滤filtered_field
domain = [('some_field', '=', record.many2one_field.id)]
records = self.env['other.model'].search(domain)
# 如果有多个匹配结果,选择第一个作为filtered_field的值
if records:
record.filtered_field = records[0]
上述示例中,MyModel
是一个自定义的模型,其中包含两个Many2one字段 many2one_field
和 filtered_field
。通过在 filtered_field
字段上定义一个compute函数 _compute_filtered_field
,我们可以在 many2one_field
字段值发生变化时实时更新 filtered_field
的值。
在 _compute_filtered_field
函数中,我们首先根据 many2one_field
的值构建一个域(domain),该域用于过滤 other.model
模型的记录。然后使用 search
方法来查找匹配域条件的记录。如果有多个匹配结果,我们选择第一个作为 filtered_field
的值。最后,我们将更新后的 filtered_field
的值赋给对应的记录。
这样,当 many2one_field
的值发生变化时,filtered_field
的值将根据过滤条件自动更新。
此外,odoo还提供了其他过滤字段的方法,例如domain
属性、onchange
装饰器等。具体的过滤方式可以根据实际需求选择。
参考链接:
领取专属 10元无门槛券
手把手带您无忧上云