iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
Odoo

Odoo16 入門介紹系列 第 4

Day4_odoo_Model介紹(2)

  • 分享至 

  • xImage
  •  

補充@api
在過去@api當中,還有@api.multi@api.one,這些@api到了後期都被@api.model給取代,比如說:
如果你想要對recordset執行for loop時,為了減輕DB負擔,會使用@api.mlti;或是只是想在recordset中,
確定只有一個record,就會使用@api.one。但這些事情都被@api.model給取代了。
@api.multi -> @api.model

@api.model
def function(self):
    for rec in self:
        name = rec.name
        val = rec.val
        rec.val = val*2

@api.one -> @api.model

@api.model
def singleton_example(self):
    self.ensure_one()
    self.sudo().unlink()

而且你在定義function時,如果你沒有指定的@api默認都是帶入@api.model,不過如果你是要改既有的function的話,你就必須宣告:

@api.model
def create(self,val):
    .
    .
    new_record = super(Library,self).create(val)
    return new_record

而我們在使用@api.depends時,是沒辦法在function中使用ERROR的(雖然可以透過def一個function包含Error),主要是因為@api.depends在odoo中主要的工作就是運算所想要呈現的值給使用者,所以是不建議這麼做的。

@api.depends('rent_time','borrow_day')
def compute_rent_time(self):
    for rec in self:
            if rec.rent_time and rec.borrow_day:
                # 计算租赁总时间
                rec.total_rent_time = rec.rent_time + timedelta(days=rec.borrow_day)
            else:
                rec._get_error()
def _get_error(self):
    raise UserError

再來會開始介紹Security,當你跟DB要了一個Table來儲存資料,勢必我們要將權限給分配好,讀者如果是剛入門,已經學會python卻第一次接觸框架的話,筆者建議寫程式是靠著熟悉再撰寫的,不需要死背,未來多多使用這些語法,自然而然就熟能生巧了,前一篇的最大目的其實也就只是有個映象而已,所以當未來遇到時,只要再回來看就好了。


上一篇
Day3_odoo_Model介紹
下一篇
Day5_odoo_Security
系列文
Odoo16 入門介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言