為增 发表于 2023-10-17 20:03:24

浅谈eval 在odoo模板(py3o)中的妙用 (本例是在odoo12下的py3o环境中用libre

${eval("env['ss.purchase.exchange.rate'].search([('currency_id', '=', 'USD'), ('crawler_day', '=', datetime.datetime(object.delivery_order_id.ATD.year, object.delivery_order_id.ATD.month, 1).strftime('%Y.%m.%d'))], limit=1).rate or None", {'env': objects.env, 'object': object, 'datetime': __import__('datetime')})}这段代码是在使用 eval 函数执行一个表达式,该表达式在 Odoo 的环境中搜索 'ss.purchase.exchange.rate' 模型的记录。
搜索的条件是 currency_id 字段等于 'USD',并且 crawler_day 字段等于给定的日期。给定的日期是 object.delivery_order_id.ATD 的年、月和第一天,格式化为 YYYY.MM.DD 格式。
如果找到匹配的记录,就返回该记录的 rate 字段的值,否则返回 None。
翻译成人话: 查询给定日期中,所在月份的第一天,也就是查询日期所在月的第一天。如果找到记录则返回,否则返回None

下面是这段代码的详细解释:

- eval 是 Python 的内置函数,用于执行字符串形式的表达式,并返回结果。
- "env['ss.purchase.exchange.rate'].search([('currency_id', '=', 'USD'), ('crawler_day', '=', datetime.datetime(object.delivery_order_id.ATD.year, object.delivery_order_id.ATD.month, 1).strftime('%Y.%m.%d'))], limit=1).rate or None" 是要执行的表达式,它是一个字符串。
- {'env': objects.env, 'object': object, 'datetime': __import__('datetime')} 是 eval 函数的第三个参数,它是一个字典,定义了表达式中可以使用的变量。

- env['ss.purchase.exchange.rate'].search([('currency_id', '=', 'USD'), ('crawler_day', '=', datetime.datetime(object.delivery_order_id.ATD.year, object.delivery_order_id.ATD.month, 1).strftime('%Y.%m.%d'))], limit=1) 是在 Odoo 的环境中搜索 'ss.purchase.exchange.rate' 模型的记录,搜索条件是 currency_id 字段等于 'USD',并且 crawler_day 字段等于给定的日期。
- datetime.datetime(object.delivery_order_id.ATD.year, object.delivery_order_id.ATD.month, 1).strftime('%Y.%m.%d') 是将 object.delivery_order_id.ATD 的年、月和第一天格式化为 YYYY.MM.DD 格式的日期。
- .rate or None 是获取搜索到的记录的 rate 字段的值,如果没有找到记录,就返回 None。

来源:https://www.cnblogs.com/lyt263/p/17769854.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 浅谈eval 在odoo模板(py3o)中的妙用 (本例是在odoo12下的py3o环境中用libre