Odoo开发之小方法

Posted by Ethan on 2019-09-14

间隔期间取数

search()orderlimit结合使用

1
2
3
4
5
6
7
8
9
10
# 修复当产品出现隔月或者多月未发生业务时,上月结转单价为0,就需追溯到有成本单价的月份进行取值
# @author:fengjiqiang@inspur.com
receipts_ids = self.env['cost.transfer.receipts.sub'].search(
[
('product_id', '=', id),
('company_id', '=', self.company_id.id),
('created_date', '<=', period.date_stop),
('outlet_unit_price', '>', 0)
], order="created_date desc", limit=1)
# receipts_ids = receipts_ids[0]

在 to-many 关联字段上设置值

完整的可用命令如下:

  • (0, _ , {‘field’: value})新建一条记录并将其与之关联
  • (1, id, {‘field’: value})更新已关联记录的值
  • (2, id, _)移除关联并删除 id 关联的记录
  • (3, id, _)移除关联但不删除 id 关联的记录。通常使用它来删除many-to-many字段的关联记录
  • (4, id, _)关联已存在记录,仅适用于many-to-many字段
  • (5, _, _)删除所有关联,但不删除关联记录
  • (6, _, [ids])替换已关联记录列表为此处的列表
    上述下划线_字符代表非关联值,通常填入 0 或 False。
    后面的非关联值可以放心地省略掉,如(4, id, _) 可使用(4, id)

上下文(context)

  1. 服务端查看上下文命令为self.context_get()self.env.context
  2. 在客户端中,上下文可用于使用default_default_search_前缀在目录视图上设置默认值或启动默认过滤器。举例如下:
    • 设置当前用户为user_id字段默认值,使用{'default_user_id': uid}
    • 在目标视图上默认启动filter_my_books过滤器,使用{'default_search_filter_my_tasks': 1}

多公司(company_id)

  1. 每个模型在设计时都要加入company_id,参考:
1
company_id = fields.Many2one('res.company', string='公司', required=True, default=lambda self: self.env.user.company_id)
  1. 使用search()方法时,在搜索条件内也要加入company_id,参考:
1
('company_id','=', self.env.user.company_id.id)