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




