odoo 13 从 `sale.subscription` 中的自定义字段创建域

odoo 13 create domain from a custom field in `sale.subscription`

你好,我是 odoo 开发的新手,这可能很简单,但我想不通

我向 sale.subscription 模型添加了一个新字段 subscription_tier


class subscription_tire_set(models.Model):
    _inherit = 'sale.subscription'

    @api.depends('recurring_invoice_line_ids.product_id')
    def _compute_subscription_tire(self):
        # code for computing

        n_subscription.subscription_tier = result 

    subscription_tier = fields.Char(string='Subscription Tier', readonly=True, compute='_compute_subscription_tire')


在我的自定义模型中,我添加了

    @api.onchange('user_name')
    def onchange_test_domain_fiedl(self):
        obj = self.search([])
        available_ids = []
        for i in obj:
            available_ids.append(i.user_name.id)

        return {'domain': {'user_name': [&,|,('id', 'not in', available_ids),(('subscription_tier','=','tier_i'),('subscription_tier','=','tier_ii'),('subscription_tier','=','tier_iii'))]}}



    user_name = fields.Many2one('sale.subscription', string='Name')

您可以使用域 in 运算符,而不是在一个字段上使用多个 OR,因此以下域:

['|', ('subscription_tier','=','tier_i'),'|', ('subscription_tier','=','tier_ii'),('subscription_tier','=','tier_iii')]  

可以简化为:

[('subscription_tier','in', ['tier_i', 'tier_ii', 'tier_iii'])]

Computed fields 默认情况下不存储,它们在请求时计算并返回。设置 store=True 会将它们存储在数据库中并自动启用搜索。也可以通过设置搜索参数来启用对计算字段的搜索。

尝试将 subscription_tier store 属性设置为 True 以启用搜索。