zoukankan      html  css  js  c++  java
  • odoo ORM研究3

    之前我们已经讲解了odoo ORM中的一些对字段常用的API操作方法,今天我们继续研究一下Odoo orm中字段的一些通用属性字段的使用,学会它们可以为自己创建数据映射并使用有更好的帮助。

    通用字段属性

    实例化映射模型的时候时可以使用以下属性

    • string(str)

      • xml视图在渲染的时候会显示这个值的内容。
      • fandx_name = fields.Char(string="姓名")
    • help(str)

      • 帮助文字,鼠标放到对应字段上面会出现help的描述内容。
      • fandx_name = fields.Char(help="这是一个姓名")
    • readonly(bool)

      • 是否是只读,只读则不可以修改字段的内容,在视图中不可以修改对应字段的内容。
      • fand_name = fields.Char(string="姓名", readonly=True)
    • required(bool)

      • 是否必填,如果required为True,那么这个字在XML视图显示的时候不填则保存的时候会报错。
      • fandx_name = fields.Char(string="姓名", readonly=True, required=True)
    • index(bool)

      • 是否在数据库建立索引,加上索引的字段在搜索的时候会有速度的提升。
      • fandx_name = fields.Char(string="姓名", readonly=True, required=True, index=True)
    • default(value 或者 callable)

      • default可以设置这个字段的默认值。

      • default的内容可以是固定的默认值。

      • default也可以是一个被调用的function,default的值会自动设置为function的返回值。

      • 方式一:fandx_name = fields.Char(string="姓名", default="张三")

      • 方式二:fandx_name = fields.Char(string="姓名", default=lambda self: self.env.user.display_name)

      • 方式三:

        def _defult_name(self):
          return self.env.user.display_name
        fandx_name = fields.Char(string="姓名", invisible=True, default=_defult_name)
        
    • states(bool)

      • 这个可以根据state状态的的值动态改变字段在XML中的显示状态。

      • 必须配合state状态字段使用。

        model.py

        state = fields.Selection([('create', '创建'), ('finish', '已完成')], string='状态', default='create')
        fandx_test = fields.Char("测试字段", states={'create': [('required', True)], 'finish': [('readonly', True)]})
        

        View.xml

        <field name="state" />
        <field name="fandx_test" />
        
      • 注意:!!!用到这个方法必须要在xml视图中加载state字段,如果不加载则会报JS错误。

    • groups(str)

      • 权限组,odoo中可以去配置自己的权限组,可以给指定的字段赋予权限组,这个字段会根据权限组的内容设置进行限制增删改查权限。
      • fandx_name = fields.Char(string="姓名", default="张三", groups='base.group_user')
    • company_dependent(bool)

      • 这个字段如果为True的话,这个字段的数据值会根据登录的用户的公司进行绑定,可以实现不同用户不同字段内容显示。
      • fandx_name = fields.Char(string="姓名", company_dependent=True)
    • copy(bool)

      • odoo有自带的模型快速复制的功能,这个如果copy的值为False那么就不会被复制,这个值默认值为True,one2many字段和计算字段是默认为Fasle的。
      • fandx_name = fields.Char(string="姓名", company_dependent=True, copy=False)
    • store(bool)

      • 是否存储到数据库中,默认值为True,compute计算字段默认值为False。
      • fandx_name = fields.Char(string="姓名", store=False)
    • group_operator(str)

      • 这里的str内容是固定的选择,在搜索分组的时候计算字段的值会用到这个group_operator的内容。

        • count - 计算数量。

        • count_distinct - 数据不同的数量。

        • bool_and - 如果所有值都为true,则为true,否则为false。

        • bool_or - true if at least one value is true, otherwise false。

        • max - 最大值。

        • min - 最小值。

        • avg - 平均值。

        • sum - 求和。

          image

      • fandx_nums = fields.Integer(string="a_test", group_operator='sum')

    • group_expand(str)

      • 这里传进一个方法名称,在分组的时候会进行调用这个方法。

        state = fields.Selection([('create', '创建'), ('finish', '已完成')], string='状态', default='create', group_expand="_expand_states")
        
        def _expand_states(self, states, domain, order):
          # 这里返回需要成组的字段,如果按state分组就会走到这个方法!
        	return [key for key, val in type(self).state.selection]
        

    总结

    • 通用属性在创建字段的时候是经常会用到的,我们需要灵活的使用它们。
    • 还有compute计算属性,这里就先不做解释,后面单独去讲解它。
    • 如果有问题请在下方留言讨论或者联系我W:fandx_


    本文 FANDX 原创内容,未经允许禁止转发,违者必究其责任!
  • 相关阅读:
    java泛型
    java集合
    java面向对象
    java常用类
    二分查找
    递归
    选择排序+冒泡排序
    threejs入门简单例子
    css表格合并边框以及单元格宽度计算方式
    Spring Boot 有哪些优点?
  • 原文地址:https://www.cnblogs.com/fandx/p/15044749.html
Copyright © 2011-2022 走看看