OpenERP (python) - 条件搜索记录ID?
我正在制作各种搜索选项,以便在打印报告之前进行筛选。比如说,如果用户提供一个日期时间,系统就只会打印在这个日期时间范围内的记录。但是如果用户没有提供日期,搜索就会跳过这个参数,按照其他选择的选项进行筛选,等等。
这个搜索是通过一个向导触发的,用户在这里输入搜索选项,然后按下打印按钮。我找不到一个合适的方法来实现条件搜索,因为我不知道用户是否输入了某些条件或者留空。因此,我想出了一个解决办法,如下所示:
card_id = datas['form']['card_id'][0]
if card_id:
start_filter = (1, '=', 1)
end_filter = (1, '=', 1)
if datas['form']['start_date']:
start_date = datas['form']['start_date']
start_filter = ('date', '>=', start_date)
if datas['form']['end_date']:
end_date = datas['form']['end_date']
end_filter = ('date', '<', end_date)
message_ids = self.pool.get('mail.message').search(self.cr, self.uid,
[('res_id', '=', card_id), ('model','=', 'some.model'),
start_filter, end_filter], order='write_date')
基本上,这段代码使用了1 = 1
作为默认的筛选条件,这样如果用户没有选择这个条件,系统就会找到所有记录,因为1 = 1
永远为真。如果用户选择了这个条件,那么在搜索之前,if
条件会被触发,并用正确的条件覆盖默认的筛选条件。
不过我觉得这种方法并不是很优雅,因为我需要使用很多if
条件,并且为每个条件提前设置默认的筛选条件。我想应该有更优雅、更好的方法吧?
1 个回答
0
你不需要把默认值设置成(1, '=', 1)。如果你给搜索功能传一个空的搜索元组列表,它会在应用模型中定义的任何记录规则后,返回所有记录。
这种写法很常见,除了让你的代码结构更清晰之外,我不知道还有其他方法可以让它更简洁。你可以先从一个空的搜索元组列表开始,然后依次调用一些方法,生成每个搜索元组并添加到这个列表里。