-->

一个人如何使用功能域的存储参数?一个人如何使用功能域的存储参数?(How does one use

2019-05-12 06:25发布

我试着阅读的文档 ,但它是一个有点混乱。

此外,没有store任何其他字段类型的工作?

Answer 1:

先回答第二个问题: relatedsparse领域是两个子类function所以store 可/应与他们合作,但我没试过。


在背后的想法store参数是告诉OpenERP的,如果它是好的记忆和保存调用功能,以避免再次调用它的结果。

它是如何工作的,让我们来看看下面的例子:

    'order_status': fields.function(
        _order_status,
        type='char',
        method=True,
        store= . . . ,
        string='Order Status',
        ),

默认情况下, storeFalse的-这意味着该函数字段将被评估每次请求的记录。

有,但是,另外两个可能的值- Truedicttuple秒。

        store=True,

True是很容易理解,而只是意味着该值将被计算一次,存储,然后重新计算每一次记录的变化。

        store={
            'model.table': (function, ['field1', 'field2', ...], priority),
            'another_model.table': (some_func, [], priority),
            },

dicttuple s的都有些复杂,以及非常强大的。 有了它,我们可以告诉OpenERP的时候 ,我们要重新计算领域。

键是表,如res.partnerproduct.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将调用_get_partner_dependent_ids ; 同样,任何时候, nameprice的领域product.product记录被改变,OpenERP的将调用_get_product_dependent_ids 2。

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

def _get_ids(key_table, cr, uid, ids_of_changed_records, context=None):

需要注意的是key_table不是self 虽然这个功能可能是你的依赖类(例如,一个方法custom.table1 ),第一个参数是不是表,但被列为在店里字典中键的表- product.productres.partner在我们的例子3。

这是什么功能,应该怎么做? 它应该返回需要有一个重新计算领域在自定义表中的所有记录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]

什么字段定义告诉我们,任何时候的state字段上记录变更fnx.pd.order_get_schedule_ids_for_order将在记录的ID叫fnx.pd.order是有他们的state字段改变。

_get_schedule_ids_for_order查找更改的记录,得到的链接日程记录的ID,并将其返回。


脚注:

  1. priority字段进行排序每_get_ids()函数对表中的每一个领域,而不仅仅是_get_ids()对单个功能。 这是非常有用的,当一个功能领域依赖于另一个。

  2. 如果字段列表为空,则任何修改任何领域将导致调用的函数。

  3. 如果你需要在函数内部访问你自己的表,你可以做

     self = key_table.pool.get('my_module_name_here.my_table_name_here') 


文章来源: How does one use the store parameter of function fields?