如何将ir.attachment列表添加到odoo版本7中的伙伴视图

时间:2014-10-11 20:05:29

标签: openerp openerp-7 odoo

我希望能够轻松地在我的视图中向res.partner模型添加附件。因此,我发现我可以使用many2many字段轻松地将res.partner模型扩展到ir.attachment

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

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

  1. 我需要点击太多才能获得新文件。首先,它打开了many2many交叉表,我可以选择已经上传的文档。其次,我可以打开上传视图。我显然不需要中间屏幕,因为此视图用于创建新的合作伙伴,因此已经上传的文件将永远不会被重复使用。
  2. 我希望上传视图填写关系字段。这些字段是res_model = res.partner,res_id =和partner_id =。
  3. 我对如何摆脱下面列出的第一个中间视图问题没有任何想法。

    我已经知道如何解决第二个问题,预先填写上传视图的数据。我在我的视图中写了这个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导入上传视图?

2 个答案:

答案 0 :(得分:1)

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

安装document插件会为partner_id添加一些额外的字段,例如ir.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 :(得分:0)

我认为你应该用于(1)

many2many_binary 

小部件单击attachmnets

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

希望这个建议能帮到你