Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用函数字段的存储参数?_Python_Openerp 7 - Fatal编程技术网

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

    元组中的第一项是要调用的函数,这是一个棘手的部分。此函数的签名为: