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

Openerp 如何在odoo版本7中将ir.attachment列表添加到合作伙伴视图,openerp,openerp-7,odoo,Openerp,Openerp 7,Odoo,我希望能够轻松地在我的视图中将附件添加到res.partner模型。因此,我发现我可以使用大量字段将res.partner模型轻松扩展到ir.attachment _columns = { 'attachments': fields.many2many('ir.attachment', string="Attachments") } 现在,当我将此字段添加到视图中时,我看到了附件列表,但是这个简单的多个小部件有两个问题 我需要太多的点击才能附加新文件。首先,它打开了多个交叉表,我可以在

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

_columns = {
    'attachments': fields.many2many('ir.attachment', string="Attachments")
}
现在,当我将此字段添加到视图中时,我看到了附件列表,但是这个简单的多个小部件有两个问题

  • 我需要太多的点击才能附加新文件。首先,它打开了多个交叉表,我可以在其中选择已经上传的文档。第二,我可以打开上传视图。我显然不需要中间屏幕,因为此视图用于创建新的合作伙伴,因此已上载的文件将永远不会被重复使用
  • 我希望upload视图的关系字段已填写完毕。这些字段是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\u id=0
    ,而不是使用新的资源id激活它(这可能不存在?)


    你对(1)如何获得即时上传视图和(2)如何将新记录的id放入上传视图有什么想法吗?

    我认为你应该使用(1)

    一键式附件的小部件

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

    希望这个建议能对您有所帮助

    我找到了我一直在寻找的解决方案

    安装
    文档
    插件会在
    ir.attachment
    中添加一些额外字段,如
    partner\u id
    。因此,我可以补充一点

    'attachments': fields.one2many('ir.attachment', 'partner_id',string="Attachments")
    
    到我的
    res.partner
    分机

    这已经允许我在没有额外视图的情况下添加附件。不幸的是,还有一个问题。由于不会填写
    res\u model
    res\u 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)
    

    问题解决了!:)

    尽管这看起来有些过分,但看起来这是一条路要走(即使是在奥多10中)。我看了一下当我们在一个线程中上传附件时会发生什么,这样附件就可以正确设置其res_模型,并且没有快速字段域或上下文。卷起袖子
    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)