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字段就行了