首页 > 数据库 >在odoo中,为什么在模型中明明有这个字段值,但是在SQL查询中,却报错:没有这个字段?

在odoo中,为什么在模型中明明有这个字段值,但是在SQL查询中,却报错:没有这个字段?

时间:2025-01-16 16:35:58浏览次数:1  
标签:段值 confirmation 数据库 sale 报错 SQL date line order

在odoo中 为什么在模型中,有的字段,用SQL有的可以查到,有的字段却报错。

select source_fact_no,confirmation_date from sale_order_line

[42703] ERROR: column "confirmation_date" does not exist 位置:31

这是什么原因,请详解一下。

在 Odoo 中,字段与数据库表之间有一个映射关系。当你执行 SQL 查询时,通常会直接访问数据库,而 Odoo 的 ORM(对象关系映射)系统则负责在应用层映射模型字段和数据库表字段。你遇到的错误 ERROR: column "confirmation_date" does not exist 表明在数据库表 sale_order_line 中并没有名为 confirmation_date 的列。这种情况通常有以下几种原因:

1. 字段是虚拟字段(Computed Field)

Odoo 中的某些字段是“虚拟字段”或“计算字段”,这些字段在数据库中没有实际存储,而是通过计算得出的。比如,confirmation_date 可能是通过 Odoo ORM 自动计算或通过某种方法动态生成的字段,而不是数据库中的实际列。因此,直接使用 SQL 查询时无法找到该字段。

解决办法:你需要通过 Odoo 的模型类和 ORM 方法来访问这些字段,而不是直接通过 SQL 查询。例如:

order_line = self.env['sale.order.line'].browse(order_line_id)
confirmation_date = order_line.confirmation_date

2. 字段名称或数据库列的映射问题

有些时候,Odoo 会在模型中使用 Python 字段名,但在数据库中可能会使用不同的列名。这个映射通常由 Odoo 自动处理,但如果字段使用了自定义名称或特殊字符,可能会导致不一致。

你可以通过查看模型定义来确认数据库中的实际列名:

class SaleOrderLine(models.Model):
    _name = 'sale.order.line'
    confirmation_date = fields.Datetime('Confirmation Date')

在这种情况下,数据库中对应的列名通常是 confirmation_date,但是如果 Odoo 使用了特定的 storecompute 装饰器,可能会导致这个字段在数据库中不存在。

3. 字段是关联字段(Many2one, One2many, 等)

confirmation_date 可能是从其他模型通过关联字段(如 Many2one)进行引用的。例如,sale_order_line 可能有一个 Many2one 字段指向 sale.order,而 confirmation_date 可能在 sale.order 模型中。你可以通过以下 SQL 查询来尝试找到对应的列:

select source_fact_no, order_id.confirmation_date
from sale_order_line
join sale_order as order_id on sale_order_line.order_id = order_id.id

这里,order_id 是指向 sale.order 的外键字段,你可以通过联接(JOIN)查询 confirmation_date

4. 字段可能没有被同步到数据库

如果你对模型做了更改(例如添加了 confirmation_date 字段),但是没有正确地更新数据库,Odoo 可能不会自动在数据库表中创建该字段。你可以尝试以下方法来同步模型更改:

  • 使用 Odoo 的 Upgrade 功能来同步数据库:
    ./odoo-bin -u all

    也可以直接通过 Odoo 的开发者模式,在模型中进行升级操作。

5. 表或字段的自定义修改

如果你自定义了 sale.order.line 模型,可能在自定义代码中进行了字段删除或重命名,而这些修改没有反映在数据库表中。检查一下是否有其他开发人员修改了表结构,并确保数据库结构与模型定义一致。

解决方案:

  1. 检查模型定义:确认 confirmation_date 是否存在于 sale.order.line 模型中,或者它是否是计算字段、关联字段。
  2. 查询关联模型:如果字段在另一个模型中,确保你正确使用 JOIN 来查询相关字段。
  3. 同步数据库:确保模型定义与数据库表结构保持一致,必要时运行数据库升级操作。

标签:段值,confirmation,数据库,sale,报错,SQL,date,line,order
From: https://www.cnblogs.com/lyt263/p/18675219

相关文章

  • sql server 每个表占用大小查询【转】
    SQLServer查看库、表占用空间大小 目录1.查看数据文件占用(权限要求较大)2.查看日志文件占用sqlserver查看所有表大小、所占空间基于T-SQL 转自:https://blog.csdn.net/yenange/article/details/50493580查询数据文件与日志文件占用情况,查看数据大小,查看库大......
  • Java开发防止SQL注入攻击
    在Java编程过程中,防止SQL注入攻击是非常重要的安全措施。以下是常用的防注入攻击措施及其原理:1.使用预编译语句(PreparedStatement)原理:PreparedStatement是JDBC提供的一种接口,它允许SQL语句在执行前被预编译。通过使用占位符?来代替参数值,并在执行时动态设置这些参......
  • 如何在红旗系统安装PGSQL数据库
    红旗系统安装PGSQL教程一、下载pgsql源码二、创建pgsql用户三、创建pgsql目录四、解压源码五、配置构建环境六、编译和安装七、创建数据库目录八、初始化数据库集群九、启动数据库十、添加环境变量十一、连接数据库十二、创建数据库用户十三、外部连接工具访问设置一......
  • 在Gitea中运行Actions demo时,遇到node报错
    错误信息node[39]:../src/node_platform.cc:68:std::unique_ptr<longunsignedint>node::WorkerThreadsTaskRunner::DelayedTaskScheduler::Start():Assertion`(0)==(uv_thread_create(t.get(),start_thread,this))'failed.1:0xb9c1f0node::Abort()[no......
  • flask之 sqlalchemy 高级查询
    1、filter_by写条件 session.query(Users).filter_by(name='lqz').all()2、between、in_session.query(Users).filter(Users.id.between(1,10)).all()ret=session.query(Users).filter(Users.id.in_([1,4,5])).all()3、~非,除...外session.query(Users).fil......
  • MYSQL数据类型
    数据类型结构化数据、例如关系型数据库半结构化数据、HTML、XML、JSON非结构化数据SQL(结构化查询语言)命令关系型数据库擅长处理结构化数据、可以通过结构化查询语言对数据进行CRUD(增删改查)DDL(数据定义语言):主要包含的命令有create、drop、a......
  • 二次开发,在使用LangChain中的Tongyi模型进行流式输出streaming报错问题,官网框架的BUG
    在使用LangChain中的Tongyi模型进行流式输出时,按照官方的代码直接运行会报一个类型错误:TypeError:Additionalkwargskeyoutput_tokensalreadyexistsinleftdictandvaluehasunsupportedtype<class'int'>.​其指向的错误文件路径如下C:\Users\Chenhao\AppData\Lo......
  • GaussDB云原生数据库SQL引擎继承原来openGauss的词法解析,语法解析,查询重写,查询优化和
    云原生数据库SQL引擎继承原来openGauss的词法解析,语法解析,查询重写,查询优化和执行引擎的能力。由于云原生数据库是shareddisk架构,一个事务在一个节点上执行,所以不需要原来分布式根据分布式key进行数据分布,分布式执行和分布式2PC提交的能力。为了支持数据库粒度的异地多活,云原生......
  • MySQL核心揭秘:从查询到修改,彻底理解 Undo Log、Redo Log、Binlog 与 ACID 的关系【转
    1前言在当今数据驱动的时代,数据库系统作为信息存储和管理的核心组件,其性能和可靠性直接影响着应用的稳定性和用户体验。MySQL,作为最流行的开源关系型数据库管理系统之一,被广泛应用于各类互联网应用中。然而,许多开发者和数据库管理员对其内部机制知之甚少,特别是在事务处理和日......
  • 东软云医院HIS系统-药房管理系统【Swing窗口+MySQL】(Java课设)
         客官进来看一眼呗,有惊喜!【帮你解决烦恼】:Java课设和计Java毕设太难不会做怎么办?系统类型Swing窗口类型+Mysql数据库存储数据使用范围适合作为Java课设!!!部署环境jdk1.8+Mysql8.0+Idea或eclipse+jdbc运行效果本系统源码地址:东软云医院HIS系统-药房管理系统【Sw......