Odoo 10 - 在标准树和日历视图中显示来自One2many的字段

时间:2017-10-06 13:44:42

标签: python xml openerp odoo-10

感谢这个网站上聪明人的帮助,我现在在我的模块中有一个很好的One2many字段,允许我添加多个订单行,就像在销售模块中一样。它工作得很好,但为了方便起见,我希望能够在我的树和日历视图中的One2many字段中看到某个字段。但是,当我尝试使用下面描述的方法显示该字段时,我得到的只是记录数。特别是,我希望它显示添加到订单行的所有产品。以下是相关代码:

models.py

# -*- coding: utf-8 -*-

from odoo import models, fields, api
from odoo.addons import decimal_precision as dp

class mymodule_base(models.Model):
    _name = 'mymodule.mymodule'
    _description = 'My Module'

    operations = fields.One2many('mymodule.line', 'order_id', 'Operation Lines')

class mymodule_line(models.Model):
    _name = 'mymodule.line'
    _description = 'Order Line'

    order_id = fields.Many2one('mymodule.mymodule')
    product_id = fields.Many2one('product.template', string='Repair / Part', required=False)

views.xml

<record id="mymodule.calendar" model="ir.ui.view">
    <field name="name">MyModule Calendar</field>
    <field name="model">mymodule.mymodule</field>
    <field name="arch" type="xml">
        <calendar string="Repairs" date_start="date_received" date_stop="date_due" color="state">
            <field name="operations">
                <field name="product_id"/>
            </field>
        </calendar>
    </field>
</record>

<record model="ir.ui.view" id="mymodule.list">
    <field name="name">MyModule list</field>
    <field name="model">mymodule.mymodule</field>
    <field name="arch" type="xml">
        <tree>
            <field name="operations">
                <field name="product_id"/>
            </field>
        </tree>
    </field>
</record>

以下是使用上述代码查看我的列表视图的图片:List View

我非常感谢任何帮助。如果我需要进一步澄清我想要做的事情,请告诉我。

修改 我已经尝试了Juan的建议,但在我看来,我仍然只看到数字,而不是产品名称。这就是我做的。我不确定我是否正确遵循了说明。

在mymodule.line下

    product_name = fields.Char(related='product_id.name', store=True)

在列表视图下

            <field name="operations" widget="one2many_list" mode="tree">
                <field name="product_id" invisible="True"/>
                <field name="product_name"/>
            </field>

在操作定义下是否包含这两行似乎并不重要。

                <field name="product_id" invisible="True"/>
                <field name="product_name"/>

我仍然得到相同的结果。

编辑2 我试过在mymodule.mymodule下添加一个相关字段:

product_name = fields.Char(related='operations.product_id.name')

然后,我在列表视图中定义了这个字段,如下所示:

<field name="product_name"/>

这给了我几乎我想要的东西,除了它只显示一个产品的名称,而不是所有产品。

1 个答案:

答案 0 :(得分:2)

您是否尝试为widget="one2many_list"字段添加正确的operations?比如发票行LINK。我希望这可以帮到你。

编辑:

使用One2many相关字段,文档说:

  

模式

     

One2many ,显示模式(视图类型),用于字段的链接记录。其中一个表单看板图表。默认为树(列表显示)

首先,在窗口小部件定义旁边添加模式属性,然后设置您要查找的模式。 其次,要获取产品的名称,您应该在mymodule.line&#39;中创建一个相关的字段,如下所示:

product_name = fields.Char(related='product_id.name', store=True)

修改您的观点,设置 product_id invisible="true",然后添加<field name="product_name"/>

警告:请勿在视图中避开 product_id 定义,因为相关字段无法正常工作

有关相关字段HERE的信息。

编辑2:

对于列表视图,请尝试:

<record model="ir.ui.view" id="mymodule.list">
<field name="name">MyModule list</field>
<field name="model">mymodule.mymodule</field>
<field name="arch" type="xml">
        <field name="operations" widget="one2many_list">
            <tree>
                <field name="product_id" invisible="True"/>
                <field name="product_name" />
            </tree>
        </field>
</field>

对于您的日历视图,请遵循相同的结构。