補充@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卻第一次接觸框架的話,筆者建議寫程式是靠著熟悉再撰寫的,不需要死背,未來多多使用這些語法,自然而然就熟能生巧了,前一篇的最大目的其實也就只是有個映象而已,所以當未來遇到時,只要再回來看就好了。