You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo v10技术问询:如何在单个树形视图中展示两个模型的数据?

解决Odoo v10中联合展示submission和res_users数据的问题

嘿,刚接触Odoo的话确实会有点摸不着头脑,别慌,我一步步带你搞定这个需求!根据你的描述,我们需要在树形视图里同时展示自定义submission表和系统自带res_users表的关联数据,核心是匹配两者的用户ID。下面分两种方案,新手优先选第一种,更贴合Odoo的标准用法~

方案一:在submission树形视图中直接关联展示用户信息(推荐)

这种方法最省心,利用Odoo的many2one关联字段直接在现有视图中嵌入用户数据,自动满足submission.user_id = res_users.id的匹配条件。

步骤1:确保submission模型有正确的关联字段

如果你的submission模型之前是用整数字段存用户ID,建议改成标准的many2one关联,这样Odoo会自动处理关联逻辑。打开自定义模块的models/submission.py,修改或添加字段:

from odoo import models, fields

class Submission(models.Model):
    _name = "your.module.submission"  # 替换成你实际的submission模型名称
    _description = "Submission Record"

    # 核心:关联res.users模型
    user_id = fields.Many2one("res.users", string="关联用户", required=True)
    # 以下是你的submission原有字段,按需保留
    submission_title = fields.Char(string="提交标题")
    submission_date = fields.Date(string="提交日期")
    # ...其他自定义字段

如果已经是many2one字段,直接跳过这一步。

步骤2:修改submission的树形视图,添加用户字段

打开模块的views/submission_views.xml,更新树形视图的代码,把res_users的字段通过关联字段引入:

<odoo>
    <record id="view_submission_tree" model="ir.ui.view">
        <field name="name">your.module.submission.tree</field>
        <field name="model">your.module.submission</field>
        <field name="arch" type="xml">
            <tree string="提交记录(含用户信息)">
                <!-- submission表的字段 -->
                <field name="submission_title"/>
                <field name="submission_date"/>
                <!-- 通过user_id关联展示res_users的字段 -->
                <field name="user_id" string="用户姓名"/>
                <field name="user_id.login" string="用户登录名"/>
                <field name="user_id.email" string="用户邮箱"/>
                <field name="user_id.phone" string="用户电话"/>
                <!-- 按需添加其他需要展示的用户字段 -->
            </tree>
        </field>
    </record>
</odoo>

步骤3:升级模块生效

回到Odoo后台,找到你的自定义模块,点击升级按钮,刷新页面后打开submission的树形视图,就能看到联合展示的数据了!


方案二:创建独立的联合报表视图(适合需要单独展示的场景)

如果需要一个独立的菜单入口来展示联合数据,可以创建一个临时模型(TransientModel)来整合两个表的数据。

步骤1:创建临时报表模型

在models/report.py中添加:

from odoo import models, fields, api

class SubmissionUserReport(models.Model):
    _name = "submission.user.report"
    _description = "提交记录与用户报表"
    _transient = True  # 临时模型,不存储数据

    # 定义需要展示的所有字段
    submission_id = fields.Integer(string="提交ID")
    submission_title = fields.Char(string="提交标题")
    submission_date = fields.Date(string="提交日期")
    user_id = fields.Integer(string="用户ID")
    user_name = fields.Char(string="用户姓名")
    user_login = fields.Char(string="登录名")
    user_email = fields.Char(string="邮箱")

    @api.model
    def get_report_data(self):
        # 查询所有关联用户的submission记录
        submissions = self.env["your.module.submission"].search([])
        report_list = []
        for sub in submissions:
            user = sub.user_id
            if user:  # 过滤掉无关联用户的记录
                report_list.append({
                    "submission_id": sub.id,
                    "submission_title": sub.submission_title,
                    "submission_date": sub.submission_date,
                    "user_id": user.id,
                    "user_name": user.name,
                    "user_login": user.login,
                    "user_email": user.email,
                })
        return report_list

步骤2:创建报表的树形视图和菜单

在views/report_views.xml中添加:

<odoo>
    <!-- 树形视图 -->
    <record id="view_submission_user_report_tree" model="ir.ui.view">
        <field name="name">submission.user.report.tree</field>
        <field name="model">submission.user.report</field>
        <field name="arch" type="xml">
            <tree string="提交与用户联合报表">
                <field name="submission_id"/>
                <field name="submission_title"/>
                <field name="submission_date"/>
                <field name="user_id"/>
                <field name="user_name"/>
                <field name="user_login"/>
                <field name="user_email"/>
            </tree>
        </field>
    </record>

    <!-- 动作配置 -->
    <record id="action_submission_user_report" model="ir.actions.act_window">
        <field name="name">提交与用户联合报表</field>
        <field name="res_model">submission.user.report</field>
        <field name="view_mode">tree</field>
        <field name="view_id" ref="view_submission_user_report_tree"/>
        <field name="target">current</field>
    </record>

    <!-- 菜单入口(替换parent为你的模块主菜单ID) -->
    <menuitem id="menu_submission_user_report" name="提交与用户报表"
              parent="your.module.main_menu"
              action="action_submission_user_report"/>
</odoo>

步骤3:更新模块配置并升级

在模块的__manifest__.py中添加新的models和views路径,然后升级模块,就能在后台看到新的菜单入口,点击即可查看联合报表。


额外提示

如果你的submission表是用整数字段存储用户ID(而非many2one),可以在模型中添加一个计算字段来关联用户:

user_id_int = fields.Integer(string="用户ID")
user_rel = fields.Many2one("res.users", compute="_compute_user_rel", store=True)

@api.depends("user_id_int")
def _compute_user_rel(self):
    for rec in self:
        rec.user_rel = rec.user_id_int

之后在视图中用user_rel.login这样的格式调用用户字段即可。

内容的提问来源于stack exchange,提问作者YamK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:13:59