OpenERP建模/视图:相关对象内联

时间:2012-06-21 17:38:16

标签: forms view model openerp

我已经安装了内置的OpenERP 6.1模块crm。

因此,我现在在“Sales-> Opportunities”中有res.lead活跃且可见。

我想编辑此对象/视图以显示合作伙伴的帐单邮寄地址。

由于我想在Opporunities表单上执行此操作,因此已经存在partner_id。

复制另一个模块,我定义了我的新模块:

class crm_lead(osv.osv):
    _name = _inherit = 'crm.lead'
    _columns = {
    'billing_address_id': fields.many2one('res.partner.address', 'Partner Billing Address', domain="[('partner_id','=',partner_id),('type','in',['invoice', 'default'])]"),
    }

我将update_xml更改为:

    <record model="ir.ui.view" id="crm_case_form_view_oppor">
        <field name="name">Opportunity form (inherit)</field>
        <field name="model">crm.lead</field>
        <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/>
        <field name="arch" type="xml">
            <data>
                <separator string="Details" position="replace" />
                <field name="description" position="replace">
                    <group colspan="2" col="4">
                        <separator colspan="4" string="Billing" />
                        <field widget="one2many_list" mode="form,tree" name="billing_address_id" colspan="4" nolabel="1" />
                    </group>
                    <group colspan="2" col="4">
                        <separator colspan="4" string="Details" />
                        <field name="description" nolabel="1" colspan="4" />
                    </group>
                </field>
            </data>
        </field>
    </record>

问题是相关对象显示了所有相关字段(正如我猜的那样)。特别是,它显示了partner_id和company字段,我想隐藏它们,因为它们应该默认/继承此机会(或链接的合作伙伴)。

我该如何隐藏这些字段?我不能简单地添加一堆“相关”字段,因为可能有多个帐单邮寄地址。

感谢您的帮助!


编辑:为了更清楚,机会应该只有一个选定的帐单地址,从合作伙伴的发票/默认地址中选择。它应该以内联方式显示,以便于编辑。

4 个答案:

答案 0 :(得分:3)

对于像这样的相关字段,specify the view有几种方法。你可以使用这样的上下文:

<field 
    name="order_line" 
    colspan="4" 
    nolabel="1"
    context="{'form_view_ref': 'module.view_id', 'tree_view_ref': 'model.view_id'}"/>

您还可以在父视图中将子记录的整个视图指定为subview,如下所示:

    <!-- <=== order_line is a one2many field -->
    <field name="order_line" colspan="4" nolabel="1">
        <form>
            <field name="qty"/>
            ...
        </form>
        <tree>
            <field name="qty"/>
            ...
        </tree>
    </field>

答案 1 :(得分:0)

好的,我有点困惑,因为你在one2one字段上放了一个one2many小部件。

如果您想控制one2many字段的显示方式,请使用我在my other answer中提到的子视图或上下文方法。

如果您想控制many2one字段的显示方式,您可以使用从您选择的记录中提取字段的相关字段,但我对此表示怀疑。只读可能有效,但我认为编辑多个相关字段并能够更改所选记录是没有意义的。您可以使用存储功能将某些功能字段组合在一起,以便回写相关记录,但这似乎会让您的用户感到困惑。

答案 2 :(得分:0)

在任何ONE Relation字段上,您可以定义内部视图,如:

  <field name=""  mode="tree,form">
        <!--Internal tree view for your Relation field model-->
        <tree>
        </tree>

        <!--Internal Form view for your Relation field model-->
        <form>
        </form>
  </field>

插件下的示例1 Click to Example 2 Click to See Example

希望这会对你有所帮助,

答案 3 :(得分:0)

现在,如果你想在你的m2o文件中提供具体细节,那么我们有一些可选的方法,你必须超过你的关系模型的def name_get,namge看起来像:

name_get(cr, user, ids, context=None)
   Returns the preferred display value (text representation) for the records with 
   the given ids. By default this will be the value of the name column, unless the
   model implements a custom behavior. Can sometimes be seen as the inverse function
   of name_search(), but it is not guaranteed to be.

   Rtype :  list(tuple)
   Return : list of pairs (id,text_repr) for all records with the given ids.

因此,在此方法中,您可以决定要显示关系字段的字符串。 Example

这将部分解决您的问题。