Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

OPENERP 库存管理源码分析(Functional Field 的个人理解)



  • Functional FieldA functional field is a field whose value is calculated by a function (ratherthan being stored in the database).
    一个函数(功能)字段是一个被用于函数计算的值(而不是被存储在数据库的表当中的)
    如果想在视图TREE里筛选函数(功能)字段 需要实现[b]fnct_search[/b]的函数
    下面用两部分来分析
    Functional Field 一个是 库存模块内的 stock_production_lot 内的 'stock_available' 字段 是 fields.function类型 意思大概是 在内部类型的库位的有有生产批次的产品个数累计

    [[i] 本帖最后由 leetaizhu 于 2010-3-11 17:51 编辑 [/i]]



  • Functional FieldA functional field is a field whose value is calculated by a function (ratherthan being stored in the database).
    一个函数(功能)字段是一个被用于函数计算的值(而不是被存储在数据库的表当中的)
    如果想在视图TREE里筛选函数(功能)字段 需要实现[b]fnct_search[/b]的函数
    下面用两部分来分析
    Functional Field 一个是 库存模块内的 stock_production_lot 内的 'stock_available' 字段 是 fields.function类型 意思大概是 在内部类型的库位的有有生产批次的产品个数累计

    [[i] 本帖最后由 leetaizhu 于 2010-3-11 17:51 编辑 [/i]]



  • 就是说 fields.function( ) 第一个参数是计算的逻辑,第二个是筛选的逻辑?



  • wjfonhand 说的对 就是这样 第一个参数是计算的逻辑,第二个是筛选的逻辑



  • function 的字段,为了速度,还是可以保存最新值的



  • function 的字段,应该不是为了速度,但它确实可以保存最新的值
    function字段我个人感觉它更像数据库中的函数
    比如 我们写一个SQL select s.no,s.name,dbo.f_数据库函数(s.id) from sample as s


  • 管理员

    oldrev的意思是,function字段的存在一般会严重影响程序的运行速度,所以我们也可以在function字段中加入store的属性,这样这个计算出的值是存入数据库的,只在需要的时候再重新运算。

    其中store参数的格式为:store={‘object_name’: (function_name,[‘field_name1’,’field_name2’],priority)}
    是当object_name的field_name1, field_name2 ...发生变化时调用function_name,并将返回的值作为函数字段的对应函数

    另外还有一个multi的属性可以配合function字段以提高其运行效率,详情请参见:[url=shine-it.net/redirect.php?fid=3&tid=842&goto=nextnewset]http://shine-it.net/redirect.php?fid=3&tid=842&goto=nextnewset[/url]



  • oldrev的意思 是告诉我 function字段类型的 fnct_inv 的用法 . 太不好意思了 没有仔细看 同时也 谢谢digitalsatori的指导
    基于库存管理 就用 stock_picking类(模块)来简单说明一下吧



  • 重庆-mrshelly(49812643) 16:38:53
    使用 Function 字段,基本上可以实现 凭空造数据的功能.
    重庆-mrshelly(49812643) 16:39:19
    也可用它来实现把其它数据库的数据表中的数据 整合到OE的对象中来的.



  • 嗯. 理论上. 只要你的 class 对象里面 实现了
    def search
    def search_count
    def read
    def write
    def create
    def unlink

    然后 在 read write create 中 有效地处理好你添加的 Function 字段的值就行了.
    还可以做到, 为系统已有的 Object 添加一个其它地方的数据.

    比如, 你有一网店系统, 上面有一个商品的上架数量(前提, 你OE的商品与你网店系统的商品ID,有一个关联表)

    然后 你可以在OE 读商品的时候, 把 上架数 这个字段添加进去, 然后 在 read 里, 在 返回的 res 里. 每条记录,添加一个 上架数 字段, 字段值嘛, 你就可以在 def read 里, 查数据库呀. 调rpc 接口啊. 甚至 读文本文件呀什么的.都可以.

    这样做了以后, 你就可以在OE中实时查看 对应商品在网店系统中的上架数了.

    同样, 如果你想在OE中修改,
    你只需要在 def write 中写一段代码. 得到新的修改的值, 然后 按网店系统的一些接口,或者直接写数据库等方式来更新到外部系统中..

    还有一些例子. 以前在群里讨论过. 如, 人事系统中.. 人员的照片儿.. 默认的方式是保存在数据库的字段中. 这样一般会造成数据库的冗余与速度问题. 所以, 你可以重写 Image 字段为 Function Field ,然后在 create 方法去保存图片到文件系统中.



  • 产品链接装箱单的功能 用 温州-老梅 用 related属性 实现很简单

    下面是用 Functional Field 实现 产品链接装箱单
    [attach]507[/attach]



  • 我也贴出我的思路,在stock.picking中添加一个字段
    from osv import fields, osv
    class stock_picking(osv.osv):
    _name = 'stock.picking'
    _inherit = 'stock.picking'
    _columns = {
    'product_ids': fields.related('move_lines','product_id',type="many2many",relation="product.product",string="Product",store=False)
    }

    stock_picking()
    然后在视图中

    <act_window
    domain="[('product_ids','=','active_id')]"
    id="act_picking_product_open"
    name="Stock Picking"
    res_model="stock.picking"
    src_model="product.product"/>



  • Sometimes you need to refer the relation of a relation. For example, supposing you have objects: City <- State <- Country, and you need to refer Country in a City, you can define a field as below in the City object:
    'country_id': fields.related('state_id', 'country_id', type="many2one",
    relation="module.country",
    string="Country", store=False)
    就是当 City <- State <- Country
    就是想从孙子找爷爷的时候 用 related 哈哈哈



  • LTZ研究透彻深入学习!
    并让我等明白function 字段的强大功能!


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待