odoo自带附件管理功能,但有时候我们需要先预览附件再选择,这里我亲测了一下,可用。如果有相同需求的朋友可以参考一下,欢迎评论交流
1.首先安装document模块,在表单视图中会有以下选项。
2.但是这个不能提前预览和统计数量,数量过多的情况,我们需要预览后再确定下载。自定义一段代码,在源码中也有参考的代码,base.module.configuration有参考的代码。我写了一个简单统计预览按钮,满足业务需要,先看看实际效果,如果有需要再往下看。
3.在模型中编写.py代码
doc_count= fields.Integer(compute='_compute_attached_document_count', string="附件数量")#先定义字段用于现实统计,该字段为计算字段
def _compute_attached_docs_count(self):
Attachment= self.env['ir.attachment'] #查找数据,附件存储于ir_attachment中,可在数据库查找
for rectify in self:
rectify.doc_count= Attachment.search_count([('res_model', '=', 'loan.loan'), ('res_id', 'in', self.ids)])#定义查找条件,res_model对应上传的模型,意思是在loan.loan模型对应的表单中上传的附件,res_id in self.ids限制res_id等于self.ids中的数据,self.ids是一个列表数据,也就是数组,但一般情况只有一个数据,当前表单对应的id,[('res_model', '=', 'loan.loan'), ('res_id', 'in', self.ids)]两个条件默认的逻辑为与,如果需要改为或,则只需要改为[('res_model', '=', 'loan.loan'), '|',('res_id', 'in', self.ids)],遵从domain表达,详细请学习domain表达。以上方法的具体效果等于用sql语句查找数据库 select * from ir_attachment where res_model = loan.loan and res_id=2。2是具体是self.ids的具体值。再使用search_count统计。
@api.multi
def attachment_tree_view(self):
self.ensure_one()
domain= [('res_model', '=', 'loan.loan'), ('res_id', 'in', self.ids)]
print self.ids
print type(self.ids)
print self.id
print self._name
return {
'domain': domain,
'name': _('附件浏览'),
'res_model': 'ir.attachment',
'type': 'ir.actions.act_window',
'view_id': False,
'view_mode': 'kanban,tree,form',
'view_type': 'form',
'limit': 80,
'context': "{'default_res_model': '%s','default_res_id': %d}" % (self._name, self.id)
}
视图层代码打不了,第一次写。截图如下,在sheet中编写如下代码,最后别忘记将xml文件添加到_manifest_.py中哦。
点击button触发attachment_tree_view方法,选择当前id对应的附件再from中打开,'name': _('附件浏览')为点开后的名称,