从不同型号的odoo 9获取数据
Get data from different model odoo 9
是否可以在一个树视图中从例如加载数据。 (项目任务、项目问题、采购订单)创建日期 = 今天。
示例:
有什么简单的解决办法吗?
如果你想从一个单一的Model
加载数据,那么你可以使用动作域来过滤。
如果您想从今天 create_date
所在的三个不同模型加载数据,您可以制作一个简单的模型,例如 view_mod
并将您想要查看的所有有趣字段放在那里,然后对于每个模型,您应该创建其相应的 view_mod
记录,然后您需要再次使用操作域进行过滤以查看今天创建的所有 view_mod
记录
如果您只想始终显示创建日期为今天的记录,您可以这样做。
1- 首先在后端使用树视图或任何视图,您应该为其创建一个且仅一个模型。
2- 当您需要在同一个树视图中显示多个模型时,或者我们可以说您想要显示查询结果时。
3- 创建一个在数据库中创建视图的模型,而不是 table 表示模型正在提取
来自数据库中视图(查询)的数据。
示例:参见模块 \addons\account\report\account_invoice_report.py
防止模型在数据库中创建 table。
_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)
现在模型将从视图中提取数据希望这就是您想要的。
试试这个例子,return全部来自数据库:
在 .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>
结果:
是否可以在一个树视图中从例如加载数据。 (项目任务、项目问题、采购订单)创建日期 = 今天。
示例:
有什么简单的解决办法吗?
如果你想从一个单一的Model
加载数据,那么你可以使用动作域来过滤。
如果您想从今天 create_date
所在的三个不同模型加载数据,您可以制作一个简单的模型,例如 view_mod
并将您想要查看的所有有趣字段放在那里,然后对于每个模型,您应该创建其相应的 view_mod
记录,然后您需要再次使用操作域进行过滤以查看今天创建的所有 view_mod
记录
如果您只想始终显示创建日期为今天的记录,您可以这样做。
1- 首先在后端使用树视图或任何视图,您应该为其创建一个且仅一个模型。
2- 当您需要在同一个树视图中显示多个模型时,或者我们可以说您想要显示查询结果时。
3- 创建一个在数据库中创建视图的模型,而不是 table 表示模型正在提取 来自数据库中视图(查询)的数据。
示例:参见模块 \addons\account\report\account_invoice_report.py
防止模型在数据库中创建 table。
_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)
现在模型将从视图中提取数据希望这就是您想要的。
试试这个例子,return全部来自数据库:
在 .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>
结果: