odoo 基础

  1. odoo的模型种类:
    1. 基本模型:models.Model  数据持久化存储
    2.  瞬态模型:models.TransientModel  数据非持久化存储,会定期删除,相当于临时表,通常用于向导
    3. 抽象模型:models.AbstractModel不在数据库存储数据。抽象模型作为可重用的功能集,利用odoo的继承功能,混入到其他模型中去。通常用于定义接口或者用作报表模型。
  2. odoo 字段的属性
    1. size 设置文本长度 size=16
      string 字段标签 默认取定义 string,否则取字段名,前台可以自定义标签名称
      translate 带翻译的字段 translate = True
      trim 去空格 默认值为 True,启动在网络客户端中自动去除周围的空格,trim=False
      help 帮助文本 鼠标悬停字段向用户显示的提示文本
      readonly 字段只读 readonly=True
      required 字段必填 会数据库里创建约束
      index 索引 index=True 为字段添加数据库索引,让搜索更 1 快速,但同时也会部分降低写操作速度,默认为 False
      copy 复制 copy=False 让字段在使用 ORM copy()方法复制字段时忽略该字段。除 to-many 关联字段外,其它字段值默认会被复制
      groups 权限 groups 可限制字段仅对一些组可访问并可见。值为逗号分隔的安全组XML ID 列表,如groups=’base.group_user,base.group_system’
      invisible 隐藏 invisible=True
      default **设置字段默认值 **可以是具体值(如 active 字段中的 default=True),或是可调用引用,有名函数或匿名函数均可
      store 值存库中 字段是否设置为能存储在数据库中,默认为 True,实时计算字段默认为 False
      oldname 此字段的前一个名称,以便 ORM 可以在迁移时自动重命名它
      compute 计算字段 函数类型字段
      inverse 逆向计算函数的函数名,可选
      search 实现该字段 search 方法的函数名
      compute_sudo 是否需要使用超级管理员对该字段进行重新计算

    2. a = fields.Many2one(‘b’, string=‘b’, ondelete=‘set null’)  

      set null: 当b中删除记录时,modelA中相关记录的a=null  默认

      cascade: 当b中删除记录时,modelA中相关记录也全部删除

      restrict: 当b中删除记录时,如果modelA中存在对应记录,则无法操作 b 的删除

  3. api
    1. @api.model
      def create(self, vals_list):
        return super(Customer, self).create(vals_list)
    2. def write(self, vals):
        return super(Customer, self).write(vals)
    3. @api.model
      def search_read(self, domain=None, fields=None, offset=0, limit=80, order=None):
        domain = (domain or []) + ['|', ('company_id', '=', False),('company_id', 'child_of', [self.env.user.company_id.id])]
        return super(Customer, self).search_read(domain=domain, fields=fields, offset=offset, limit=limit,order=order)

      @api.model
      def search_count(self, args):
        args = (args or []) + ['|', ('company_id', '=', False),('company_id', 'child_of', [self.env.user.company_id.id])]
        return super(Customer, self).search_count(args)

    4. constrains  校验
    5. def copy(self, default=None):

      lines = self.component_cost_lines
      default = default if default else {}
      result = super(ComponentCost, self).copy(default)

      for line in lines:
      line.copy({
      'component_cost_id':result.id
      })
      return result

 

   https://blog.csdn.net/run_noob_vip/article/details/122805422    Workder的计算方法

 

 




posted @   来又来去又去  阅读(246)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示