OPENERP 库存管理源码分析(Functional Field 的个人理解)
-
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字段以提高其运行效率,详情请参见: shine-it.net/redirect.php?fid=3&tid=842&goto=nextnewset
-
嗯. 理论上. 只要你的 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 方法去保存图片到文件系统中.
-
我也贴出我的思路,在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 哈哈哈