我希望能够轻松地在我的视图中向res.partner
模型添加附件。因此,我发现我可以使用many2many字段轻松地将res.partner
模型扩展到ir.attachment
。
_columns = {
'attachments': fields.many2many('ir.attachment', string="Attachments")
}
现在,当我将此字段添加到我的视图中时,我会看到附件列表,但我对这个简单的many2many小部件有2个问题。
我对如何摆脱下面列出的第一个中间视图问题没有任何想法。
我已经知道如何解决第二个问题,预先填写上传视图的数据。我在我的视图中写了这个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导入上传视图?
答案 0 :(得分:1)
我已经找到了我想要的解决方案。
安装document
插件会为partner_id
添加一些额外的字段,例如ir.attachment
。因此,之后,我可以添加
'attachments': fields.one2many('ir.attachment', 'partner_id',string="Attachments")
到我的res.partner
扩展程序。
这已经允许我在没有额外视图的情况下添加附件。不幸的是,仍有一个问题。由于res_model
和res_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>
希望这个建议能帮到你