【问题标题】:Get data from different model odoo 9从不同模型odoo 9获取数据
【发布时间】:2017-06-28 08:22:07
【问题描述】:

是否可以在一个树视图中从例如加载数据。 (项目任务、项目问题、采购订单)其中创建日期 = 今天。

例子:

有什么简单的解决办法吗?

【问题讨论】:

  • 你能解释一下吗?
  • @Pointer 你想在树形视图中找到按天创建的所有数据
  • @KHELILIHamza 最好的解决方案是在树形视图中显示名称、日期和可能的模块名称,然后单击转到该模块的表单。
  • @VikiChavada 示例:postimg.org/image/eaq5d53qt
  • @Pointer 我认为您可以参考 Cherif Odoo 屏幕报告代码之类的东西,您也可以添加一个按钮来打开该特定记录。

标签: odoo-9 odoo-10 odoo


【解决方案1】:

如果您只想始终显示创建日期为今天的记录,您可以这样做。

1- 首先在后端使用树视图或任何视图,您应该为其创建一个且只有一个模型。

2- 当您需要在同一个树视图中显示多个模型时,或者我们可以说您想要显示查询结果时。

3- 创建在数据库中创建视图而不是表的模型意味着模型正在提取 来自数据库中视图(查询)的数据。

示例:参见模块\addons\account\report\account_invoice_report.py

防止模型在数据库中创建表。

    _name = 'view.name'
    _auto = False 

然后创建视图覆盖方法:

    # in odoo 10.0
    @api.model_cr
    def init(self):
        # drop the view first 
        tools.drop_view_if_exists(self.env.cr, self._table)

        # create the view.
        self.env.cr.execute("""CREATE or REPLACE VIEW %s as (
          you query here.
        )""" % self._table)

现在模型将从视图中提取数据,希望这是您想要的。

【讨论】:

    【解决方案2】:

    试试这个例子,从数据库中全部返回:

    在 .py 文件中添加以下代码:

    class CustomReport(models.Model):
        _name = "my.report"
        _description = "my report"
        _auto = False
    
    
        name = fields.Char(string='Name', readonly=True)
    
        def init(self, cr):
            tools.drop_view_if_exists(cr, self._table)
            cr.execute("""CREATE or REPLACE VIEW my_report as 
                            SELECT
                            id,
                            concat(name,' | ', description) as name
                            from project_task 
                            UNION ALL 
                            SELECT 
                            id,
                            concat(name,' | ', amount_total) as name
                            from purchase_order
                            UNION ALL 
                            SELECT 
                            id,
                            concat(number,' | ', residual) as name 
                            from account_invoice
                            """)
    

    在.xml文件中添加:

    <?xml version="1.0" encoding="utf-8"?>
    <odoo>
        <record id="view_my_report_tree" model="ir.ui.view">
            <field name="name">my.report.tree</field>
            <field name="model">my.report</field>
            <field name="arch" type="xml">
                <graph string="Name" type="bar">
                    <field name="id" type="row" />
                    <field name="name" type="row" />
                </graph>
            </field>
        </record>
    
    
        <record id="action_my_report" model="ir.actions.act_window">
            <field name="name">Name</field>
            <field name="res_model">my.report</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree</field>
        </record>
    
        <menuitem name="My report" action="action_my_report" id="menu_my_report"/>
    
    </odoo>
    

    结果:

    【讨论】:

      【解决方案3】:

      如果您想从单个Model 加载数据,则可以使用操作域进行过滤。

      如果您想从它们的create_date 所在的三个不同模型中加载数据,您可以创建一个简单模型,例如view_mod,然后将您想要查看的所有有趣字段放在那里,然后对于每个模型您应该创建他们相应的view_mod 记录,然后您需要再次使用操作域进行过滤以查看今天创建的所有view_mod 记录

      【讨论】:

      • Tnx 回答,有在线示例吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多