odoo開發筆記 -- 附件上傳


附件上傳基本原理實現,可以參考這篇:

https://www.cnblogs.com/ljwTiey/p/7348291.html

http://blog.csdn.net/wangnan537/article/details/41903159

 

首先我們看一下odoo界面默認的附件功能,有木有感覺不是很友好!囧 :)

下面給小伙伴們介紹另一種odoo自帶的附件管理方式!

首先,在你的模型中增加如下定義:

    ###############################################################################################################
    # 增加附件上傳功能
    attachment_number = fields.Integer(compute='_compute_attachment_number', string='Number of Attachments')
    @api.multi
    def _compute_attachment_number(self):
        """附件上傳"""
        attachment_data = self.env['ir.attachment'].read_group([('res_model', '=', '替換成你的模型名'), ('res_id', 'in', self.ids)], ['res_id'], ['res_id'])
        attachment = dict((data['res_id'], data['res_id_count']) for data in attachment_data)
        for expense in self:
            expense.attachment_number = attachment.get(expense.id, 0)

    @api.multi
    def action_get_attachment_view(self):
        """附件上傳動作視圖"""
        self.ensure_one()
        res = self.env['ir.actions.act_window'].for_xml_id('base', 'action_attachment')
        res['domain'] = [('res_model', '=', '替換成你的模型名'), ('res_id', 'in', self.ids)]
        res['context'] = {'default_res_model': '替換成你的模型名', 'default_res_id': self.id}
        return res
    #############################################################################################

前端view視圖增加如下代碼:

<div class="oe_button_box" name="button_box">
    <button name="action_get_attachment_view" class="oe_stat_button" icon="fa-book" type="object">
        <field name="attachment_number" widget="statinfo" string="附件上傳"/>
    </button>
</div>

實現效果:

注意上方這個上傳界面,odoo做了權限配置,在開發者模式下,和普通模式下,顯示的界面是不同的。

激活開發者模式,該界面顯示效果:

這里其實是在視圖view前端代碼字段中增加了如下設置:

小伙伴們試試吧!!!

ps: 另外,注意一下,odoo附件模型屬於底層模型,當服務啟動時候,就會加載附件模型數據結構;因此,當你自定義了一個新模塊A,擴展了附件的字段,沒問題,可以正常安裝,也可以正常使用!

但是,但是!如果該新模塊A使用了一段時間后,假如你還想在該模塊A基礎上繼續擴展附件字段!

對不起,這個時候,擴展后,重啟odoo服務會報錯,提示相關附件,找不到你擴展的那個字段。

就是由於,服務啟動的時候,附件模型py數據結構文件就會被加載,但是真正的此時數據庫中還沒有生成相應的字段,所以會報錯。

而我們自己開發的模塊在模型字段擴展后,為什么沒有這個問題呢?

這是因為,我們普通模塊模型修改后,同樣在odoo服務重啟后,模型py文件會被加載,但是,我們可以進入應用列表,找到該模塊,點擊升級,數據庫中就會生成新的表結構。

結論:我們在擴展odoo底層自帶模塊模型字段的時候,要么一次定義好,要么使用一段時間后還想擴展,那么可以重新編寫個單獨的模塊來擴展。

 


免責聲明!

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



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