如何在odooversion7中将ir.attachment列表添加到合作伙伴视图中



我想在视图中方便地向res.partner模型添加附件。因此,我发现我可以用许多字段轻松地将res.partner模型扩展到ir.attachment

_columns = {
    'attachments': fields.many2many('ir.attachment', string="Attachments")
}

现在,当我将此字段添加到我的视图中时,我会看到附件列表,但这个简单的many2many小部件有两个问题。

  1. 我需要点击太多才能附加一个新文件。首先,它打开了many2many交叉表,我可以在其中选择已经上传的文档。第二,我可以打开上传视图。我显然不需要中间屏幕,因为这个视图用于创建新的合作伙伴,因此已经上传的文件将永远不会被重复使用
  2. 我希望上传视图中的关系字段能够被填充。这些字段是res_model=res.partner、res_id=和partner_id=

关于如何摆脱下面概述的第一个中间视图问题,我没有任何想法。

我对如何解决第二个问题有了一个想法,即预先填写上传视图的数据。我在我的视图xml 中写了这篇文章

<field name="attachments" 
    context="{'default_res_model': 'res.partner', 'default_res_id': active_id, 'default_partner_id': active_id}"/>

不幸的是,这不起作用,因为active_id=0,而不是使用新的资源id处于活动状态(这甚至可能不存在?)。

你知道(1)如何获得即时上传视图和(2)如何将新记录的id输入上传视图吗?

我找到了我想要的解决方案。

安装document插件会添加一些额外的字段,如partner_idir.attachment。因此之后,我可以添加

'attachments': fields.one2many('ir.attachment', 'partner_id',string="Attachments")

到我的res.partner分机。

这已经允许我在没有额外视图的情况下添加附件。不幸的是,还有一个问题。由于不会填写res_modelres_id字段,因此附件在正常的res.partner视图下不可用。

为了解决这个问题,我不得不用以下内容扩展ir.attachment模型:

from openerp.osv.orm import Model
class document_file(Model):
    _inherit = 'ir.attachment'
    def create(self, cr, uid, vals, context=None):
        if vals.get('partner_id', 0) != 0 and not (vals.get('res_id', False) and vals.get('res_model', False)):
            vals['res_id'] = vals['partner_id']
            vals['res_model'] = 'res.partner'
        return super(document_file, self).create(cr, uid, vals, context)
    def write(self, cr, uid, ids, vals, context=None):
        if vals.get('partner_id', 0) != 0 and not (vals.get('res_id', False) and vals.get('res_model', False)):
            vals['res_id'] = vals['partner_id']
            vals['res_model'] = 'res.partner'
        return super(document_file, self).write(cr, uid, ids, vals, context)

问题解决了!:)

我认为你应该使用(1)

many2many_binary 

一键附件的小部件网络

<page string="Attachments">
    <field name="attachments" widget="many2many_binary"/>
</page>

希望这个建议能帮助你

相关内容

最新更新