odoo 附件系统 一

ir_attachment 附件系统管理附件

odoo得 文件 存储 都是在此存储得

存储路径在

add_dir = os.path.join(self[‘data_dir’], ‘addons’)

主要结构参数

字段 类型 说明
res_id integer 所属记录
res_model char 所属model
name char 附件显示名称
datas_fname char 附件名称
datas binary base64编码的文件
store_fname char 附件存储的软地址
_filestore() function 返回附件的实际存储路径
type selection url/binary
url char url连接地址
db_datas binary 如不是存储数据库,存储实体
companyjd Many2one 默认公司
description text 附件简介

在这里插入图片描述
默认得xml位置 ‘base’. ‘action_attachment’

<field name="name"/>
<field name="folder_id"/>
<field name="tag_ids" widget="many2many_tags"/>
<field name="datas" filename="datas_fname" attrs="{'invisible':[('type','=','url')]}"/>
<field name="datas_fname" invisible="1" attrs="{'invisible':[('type','=','url')]}" class="oe_inline oe_right"/>
<field name="owner_id"/>
<field name="partner_id"/>
<field name="file_size" attrs="{ 'invisible' : [('type', '!=', 'binary')]}"/>
<field name="type" readonly="1"/>
<field name="url" attrs="{ 'invisible' : [('type', '!=', 'url')]}"/>

上传得方式

  • 利用 上传得 二进制数据 上传到python 。然后利用python得能力写入到文件
datas = fields.Binary(string='File Content', compute='_compute_datas', inverse='_inverse_datas')
store_fname = fields.Char('Stored Filename')

    def _inverse_datas(self):
        for attach in self:
            # compute the fields that depend on datas
            value = attach.datas
            bin_data = base64.b64decode(value) if value else b''
            vals = {
                'file_size': len(bin_data),
                'checksum': self._compute_checksum(bin_data),
                'index_content': self._index(bin_data, attach.datas_fname, attach.mimetype),
                'store_fname': False,
                'db_datas': value,
            }
            # 写入二进制文件
            if value and location != 'db':
                # save it to the filestore
                vals['store_fname'] = self._file_write(value, vals['checksum'])
                vals['db_datas'] = False
			#......
	    # 获取所有路径
    @api.model
    def _full_path(self, path):
        # sanitize path
        path = re.sub('[.]', '', path)
        path = path.strip('/\\')
        return os.path.join(self._filestore(), path)

如何上传文件名字

filename: 用于二进制字段,它是用于存储上传文件名称的模型字段名称。

demo 不利用field属性上传文件

https://sxfblog.com/index.php/archives/421.html

其实原理找到。可以在用其他方式
例如 line_ids= one2many(‘ir.attachment’)

里面写 ir.attachment 得tree 和 form字段就行了

既然写入能行。读取如何读呢? 待续

猜你喜欢

转载自blog.csdn.net/sr50611/article/details/104358416