odoo使用筆記


原文地址:http://www.cnblogs.com/ygj0930/p/7144502.html

1:active字段為False的記錄如何顯示:

odoo中默認,active字段為False的記錄上不顯示的。但是如果在創建時沒有勾選active,之后想要顯示它,那就需要吧active修改為True。

然而它現在是不可見的,怎么修改?

通過odoo提供的搜索視圖來實現:

自定義篩選——active字段——為假

即可把active為False的記錄顯示出來,點擊它進行編輯,修改active為True即可。

 

2:添加了唯一性約束的字段,如何復制記錄?

如果為模型的字段添加了唯一性約束,那么在記錄的form視圖功能菜單上選擇“復制”時就會報錯。

那么我們要在維持唯一性的前提下,保留復制功能,則只能重寫模型的copy方法,在方法中為有唯一性約束的字段添加辨別性內容,使得紀錄可以被成功復制(當然,新紀錄中唯一性約束的字段時修改后的值,仍然唯一)

復制代碼
 def copy(self, default=None):
        default = dict(default or {})

       #統計數據庫中已有多少個本紀錄的副本
        copied_count = self.search_count(
            [('字段', '=like', u"Copy of {}%".format(self.字段))])
       #為副本中的字段值添加尾部修飾,維持唯一性
       #第一次復制:cpoy of 原字段值
        if not copied_count:
            new_字段 = u"Copy of {}".format(self.字段)
       #第n次復制:copy of 原字段值(次數)
        else:
            new_字段 = u"Copy of {} ({})".format(self.name, copied_count)
        #調用父類復制函數,並把新默認值傳入
        default['字段名'] = new_字段
        return super(類名, self).copy(default)
復制代碼

 

3:想根據某字段不同值而進行不同顯示,但有不需要顯示該字段值,怎么辦?

視圖標簽中包含這個field(包含這個字段才可以使用該字段),但其invisible屬性設置為1,即:該字段不可見。

 <field name="字段" invisible="1"/>

 

4:逆運算

當通過compute屬性指定方法,根據依賴值計算得到當前字段值時。一般也要制定這個計算的逆運算——根據當前字段值,改變依賴值。

比如:開始日期+持續時間=結束日期,我們有這個可以得到結束日期。

如果用戶指定了開始日期和結束日期,那么持續時間=介紹日期-開始日期,實現這個邏輯的方法就是inverse屬性值指向的方法。

復制代碼
   #定義結束日期字段,結束日期由開始+持續,而設置結束日期,則需要自行計算出持續日期
    end_date = fields.Date(string="End Date", store=True,
                           compute='_get_end_date', inverse='_set_end_date')
    #"獲取結束日期"事件的響應函數:計算出結束日期
    @api.depends('start_date', 'duration')
    def _get_end_date(self):
        for r in self:
            if not (r.start_date and r.duration):
                r.end_date = r.start_date
                continue
            start = fields.Datetime.from_string(r.start_date)
            duration = timedelta(days=r.duration, seconds=-1)
            r.end_date = start + duration

    #"設置結束日期"事件的響應函數:計算並設置持續時間
    def _set_end_date(self):
        for r in self:
            if not (r.start_date and r.end_date):
                continue
            start_date = fields.Datetime.from_string(r.start_date)
            end_date = fields.Datetime.from_string(r.end_date)
            r.duration = (end_date - start_date).days + 1
復制代碼

 

5:odoo圖片顯示

odoo沒有專門的圖片標簽,但是可以通過widget來控制field標簽來顯示圖片內容。

圖片的內容保存在Binary類型的字段中,然后在視圖文件中通過以下語句顯示出來:

<field name="Img字段" widget="image" class="oe_avatar oe_left"/>

 

6:Odoo中數據保存的流程

在新建一條記錄,點擊“保存”按鈕后,會把該條記錄保存到數據庫中。

有時候,我們會對模型記錄進行約束,比如:與其他記錄比較某字段值,不能相同或者范圍重疊等。

此時,會遇到一個問題:新增記錄會與自己進行比較。

很多人對約束的理解為:新建一條記錄,點擊“保存”時進行約束檢查,如果不符合要求則拋出異常,記錄生成失敗。

然而,真正的流程應該是:內存中生成了模型記錄——嘗試插入表——約束檢查——檢測到異常,插入失敗。

約束,是在記錄生成之后,插入數據表之前進行的判斷,約束不能阻止記錄的生成。我們可以在代碼中,通過環境上下文訪問到新生成的記錄!

因此,如果在約束函數中將新記錄與數據庫中查找記錄進行比較時,切記要增加一個判斷條件:新記錄id!=數據庫中記錄id,避免自己與自己比較。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM