You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Odoo开发新手求助:如何向数据库插入自定义字段数据?

嘿,作为刚入坑Odoo开发的新手,这种找不到方向的感觉太懂了!我来给你掰扯清楚怎么把新字段的数据存进数据库~

向Odoo数据库插入/更新数据的核心玩法

Odoo根本不需要你直接写SQL插数据,它自带的ORM(对象关系映射)方法就搞定一切,这也是官方推荐的方式,避免直接操作数据库踩坑。

1. 最常用的两个核心方法

插入新记录:create()

当你要新增一条包含新字段的记录时,直接调用模型的create()方法,把字段和对应值以字典形式传进去就行。举个实际例子:
假设你的模型叫my.test.model,新字段是custom_field,那代码可以这么写:

# 比如在某个按钮的点击方法里调用
def add_new_record(self):
    # 创建新记录,自动把数据存入数据库
    new_record = self.env['my.test.model'].create({
        'name': '测试名称',  # 模型里的必填字段别忘了填
        'custom_field': '我要存的新字段内容',
    })

更新已有记录:write()

如果是给已经存在的记录的新字段赋值,就用write()方法。先通过search()找到目标记录,再调用write()更新:

def update_existing_record(self):
    # 先找到要更新的记录(这里用name做条件,你可以换成自己的查询条件)
    target_record = self.env['my.test.model'].search([('name', '=', '测试名称')])
    # 更新新字段的值
    target_record.write({
        'custom_field': '更新后的新字段内容'
    })

2. 这些方法从哪来?

这些方法是Odoo所有模型的父类models.Model提供的,你要是好奇源码的话,可以去Odoo安装目录下的odoo/models.py里找create()write()的定义。不过新手阶段完全不用纠结源码,只要记住:在自己的模型方法里,通过self.env['你的模型名']就能调用这些ORM方法。

3. 先确认你的新字段定义没问题

你已经创建了新字段,先检查下模型里的字段定义是不是正确的,比如:

from odoo import models, fields

class MyTestModel(models.Model):
    _name = 'my.test.model'
    _description = '测试模型'

    name = fields.Char(string='名称', required=True)
    custom_field = fields.Char(string='我的自定义字段')  # 这就是你的新字段

只有字段定义正确,create()write()才能把数据正确存入对应的数据库表(Odoo会自动根据模型生成表,比如my_test_model表,字段对应custom_field列)。

4. 额外小技巧:批量操作

要是需要一次性插入多条记录,直接把字典列表传给create()就行:

def add_multiple_records(self):
    self.env['my.test.model'].create([
        {'name': '记录1', 'custom_field': '数据1'},
        {'name': '记录2', 'custom_field': '数据2'},
        {'name': '记录3', 'custom_field': '数据3'},
    ])

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

火山引擎 最新活动