Openerp 加载视图上的Odoo自定义筛选器域字段

Openerp 加载视图上的Odoo自定义筛选器域字段,openerp,odoo-8,odoo-9,Openerp,Odoo 8,Odoo 9,我在Odoo 9中为预订创建了一个模块,我的模型的一个字段是根据是否保留或否填充的。基本上,我的模型是: class Reservation(models.Model): .... room_id = fields.Many2one('reservation.room', string="Room") 我定义了一个onchange函数,它返回一个域来过滤未保留的房间ID: @api.onchange('date') def _set_available_room(self):

我在Odoo 9中为预订创建了一个模块,我的模型的一个字段是根据是否保留或否填充的。基本上,我的模型是:

class Reservation(models.Model):
    ....
    room_id = fields.Many2one('reservation.room', string="Room")
我定义了一个
onchange
函数,它返回一个域来过滤未保留的房间ID:

@api.onchange('date')
def _set_available_room(self):
    .....
    return {'domain': {'room_id': [('id', 'in', res)]}}
这很好,当我设置日期时,房间过滤正常。我的问题是当我保存预订并再次输入以编辑它时。
room\u id
字段显示所有值,仅当我更改
date
时,
room\u id
才会被过滤

我曾尝试在字段定义中使用
属性,如下所示,但不起作用:

room_id = fields.Many2one('reservation.room', string="Room", domain=lambda self: self._get_available_slots())

除了搜索可用房间外,我如何使用我的函数在负载视图中过滤此字段?

如何通过SQL查询
self.env.cr.execute('SELECT id FROM reservation_room…')
计算
res
变量?。正如我所说,它在onchange事件上运行良好。为什么不尝试覆盖
name\u search
method呢?非常感谢。我已经重写了
name\u search
方法,效果很好。在字段视图中,我设置了
上下文
来传递日期,在
中,我通过如下假字段进行过滤:
域=“[('is_available','=',True)]”
。然后在
name\u search
方法中,如果它被
is\u available
过滤,我将执行所有SQL以获得可用的房间。@CarlosMayo感谢您的回答。祝你发展顺利;)如何计算
res
变量?通过SQL查询
self.env.cr.execute('SELECT id FROM reservation\u room…)
然后
res=self.env.cr.fetchall()
。正如我所说,它在onchange事件上运行良好。为什么不尝试覆盖
name\u search
method呢?非常感谢。我已经重写了
name\u search
方法,效果很好。在字段视图中,我设置了
上下文
来传递日期,在
中,我通过如下假字段进行过滤:
域=“[('is_available','=',True)]”
。然后在
name\u search
方法中,如果它被
is\u available
过滤,我将执行所有SQL以获得可用的房间。@CarlosMayo感谢您的回答。祝你发展顺利;)