Python 如何使用函数字段的存储参数?
我试过阅读,但有点混乱Python 如何使用函数字段的存储参数?,python,openerp-7,Python,Openerp 7,我试过阅读,但有点混乱 另外,store是否适用于任何其他字段类型?首先回答第二个问题:相关的和稀疏的字段都是函数的子类,因此store可能/应该适用于它们,但我没有尝试过 store参数背后的思想是告诉OpenERP是否可以记住并保存调用函数的结果,以避免再次调用它 关于它的工作原理,让我们看一下以下示例: 'order_status': fields.function( _order_status, type='char', meth
另外,
store
是否适用于任何其他字段类型?首先回答第二个问题:相关的
和稀疏的
字段都是函数
的子类,因此store
可能/应该适用于它们,但我没有尝试过
store
参数背后的思想是告诉OpenERP是否可以记住并保存调用函数的结果,以避免再次调用它
关于它的工作原理,让我们看一下以下示例:
'order_status': fields.function(
_order_status,
type='char',
method=True,
store= . . . ,
string='Order Status',
),
默认情况下,store
为False
——这意味着每次请求记录时都会计算函数字段
但是,还有另外两个可能的值--True
,或者tuple
s的dict
store=True,
True
很容易理解,简单地说,值将被计算一次、存储,然后在每次记录更改时重新计算
store={
'model.table': (function, ['field1', 'field2', ...], priority),
'another_model.table': (some_func, [], priority),
},
元组的dict既复杂又强大。使用它,我们可以告诉OpenERP何时需要重新计算字段
键是表,例如res.partner
或product.product
;三项元组中的第一项是要调用的函数,第二项是要监视的键表中的字段列表,最后一项是处理函数的优先级或顺序(如果有多个1)
例如:
store={
'product.product': (_get_product_dependent_ids, ['name','price'], 20),
'res.partner': (_get_partner_dependent_ids, ['login'], 10),
},
向后看,优先级(每个元组的最后一项)告诉我们,res.partner
元组将首先运行,因为它的优先级较低
中间的项目是要监视的字段列表:对于res.partner
OpenERP将监视login
字段,并且每当login
字段更改时,OpenERP将调用\u get\u partner\u dependent\u id
;同样,只要产品.product
记录的名称
或价格
字段发生更改,OpenERP将调用\u get\u product\u dependent\u id
2
元组中的第一项是要调用的函数,这是一个棘手的部分。此函数的签名为:
def _get_ids(key_table, cr, uid, ids_of_changed_records, context=None):
请注意,key\u表
不是self
即使此函数可能是依赖类中的一个方法(例如,custom.table1
),第一个参数不是该表,而是在我们的示例3中作为存储字典--product.product
或res.partner
中的键列出的表
这个函数应该做什么?它应该返回自定义表中需要重新计算该字段的所有记录ID的列表
这是我的函数字段:
'order_status': fields.function(
_order_status,
type='char',
method=True,
store={
'fnx.pd.order': (_get_schedule_ids_for_order, ['state'], 20),
},
我的商店功能:
def _get_schedule_ids_for_order(fnx_pd_order, cr, uid, ids, context=None):
if not isinstance(ids, (int, long)):
[ids] = ids
return [s.id for s in fnx_pd_order.browse(cr, uid, ids, context=context).schedule_ids]
字段定义告诉我们的是,每当fnx.pd.order
中的记录上的状态
字段发生更改时,\u-get\u-schedule\u-id\u-for\u-order
将调用fnx.pd.order
中更改了其状态
字段的记录的ID
\u获取订单的计划ID\u
查找更改的记录,获取链接的计划记录的ID,并返回它们
脚注:
priority
字段对表中每个字段的每个\u get\u ids()
函数进行排序,而不仅仅是对单个函数的\u get\u ids()
进行排序。当一个函数字段依赖于另一个函数字段时,这非常有用self = key_table.pool.get('my_module_name_here.my_table_name_here')
首先回答第二个问题:
相关
和稀疏
字段都是函数
的子类,因此存储
可以/应该使用它们,但我没有尝试
store
参数背后的思想是告诉OpenERP是否可以记住并保存调用函数的结果,以避免再次调用它
关于它的工作原理,让我们看一下以下示例:
'order_status': fields.function(
_order_status,
type='char',
method=True,
store= . . . ,
string='Order Status',
),
默认情况下,store
为False
——这意味着每次请求记录时都会计算函数字段
但是,还有另外两个可能的值--True
,或者tuple
s的dict
store=True,
True
很容易理解,简单地说,值将被计算一次、存储,然后在每次记录更改时重新计算
store={
'model.table': (function, ['field1', 'field2', ...], priority),
'another_model.table': (some_func, [], priority),
},
元组的dict既复杂又强大。使用它,我们可以告诉OpenERP何时需要重新计算字段
键是表,例如res.partner
或product.product
;三项元组中的第一项是要调用的函数,第二项是要监视的键表中的字段列表,最后一项是处理函数的优先级或顺序(如果有多个1)
例如:
store={
'product.product': (_get_product_dependent_ids, ['name','price'], 20),
'res.partner': (_get_partner_dependent_ids, ['login'], 10),
},
向后看,优先级(每个元组的最后一项)告诉我们,res.partner
元组将首先运行,因为它的优先级较低
中间的项目是要监视的字段列表:对于res.partner
OpenERP将监视login
字段,并且每当login
字段更改时,OpenERP将调用\u get\u partner\u dependent\u id
;同样,只要产品.product
记录的名称
或价格
字段发生更改,OpenERP将调用\u get\u product\u dependent\u id
2
元组中的第一项是要调用的函数,这是一个棘手的部分。此函数的签名为: