odoo ORM研究3 - odoo fields常用的字段屬性

之前我們已經講解了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_
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章