动态添加/删除输入字段Odoo

时间:2016-11-04 08:36:23

标签: openerp

我想在表单中动态添加和删除输入字段,但我没有想法是否可行或如何操作。有人可以帮我解决这个问题吗?

我想创建这样的东西:

check the image, please!

2 个答案:

答案 0 :(得分:1)

我担心,据我所知,在Odoo中你想做的事情是不可能的。

原因是视图中的字段直接映射到模型中的字段,而字段又映射到数据库。

我非常肯定你可以使用像JQuery这样的东西来修改DOM并随意将输入字段插入到DOM中,但是那些输入元素会没用,因为没有办法获得他们的价值或与他们合作,因为他们不会以任何方式与Odoo联系在一起。

我怀疑您正在处理X Y问题。

您实际上可以这样做,但是当您使用Odoo而不是模块构建网站时,就可以了。

模块最接近的是使用xpath删除和添加字段。但是当您添加字段时,这些字段必须存在于您的模型定义中才能对您有用。

答案 1 :(得分:0)

是的,您可以做到。 第一个解决方案:由于所有视图都在“ ir.ui.view”中定义,因此您可以在特定视图的列上编写,因此可以创建一个新视图。

第二种解决方案:有一个名为fields_view_get的方法,该方法将向您返回与该对象相关的视图,因此您可以调用super方法并进行更改并返回对象,如下面示例中来自'crm所示。领导'

 def fields_view_get(self, cr, user, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
    if view_type == 'form' and context and context.get('opportunity_id'):
        # TODO: replace by get_formview_action call
        lead_type = self.browse(cr, user, context['opportunity_id'], context=context).type
        view_lead_xml_id = 'crm_case_form_view_oppor' if lead_type == 'opportunity' else 'crm_case_form_view_leads'
        _, view_id = self.pool['ir.model.data'].get_object_reference(cr, user, 'crm', view_lead_xml_id)
    res = super(crm_lead,self).fields_view_get(cr, user, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
    if view_type == 'form':
        res['arch'] = self.fields_view_get_address(cr, user, res['arch'], context=context)
    return res