Mapping 如何使用XMLRPC在Odoo中编写多个字段

Mapping 如何使用XMLRPC在Odoo中编写多个字段,mapping,field,odoo,xml-rpc,many-to-one,Mapping,Field,Odoo,Xml Rpc,Many To One,我想对模型product.category使用xmlrpc 如何在PYTHON中使用read和Search编写字段categ_id?我总是犯错误。我需要这样做,因为我必须将这些信息转移到另一个数据库Odoo中 导入xmlrpc.client 导入时间 url_db1=http://localhost:8069 db_1='db_ONE' 用户名\u db\u 1='username' 密码\u db\u 1='password' common_1=xmlrpc.client.ServerProx

我想对模型product.category使用xmlrpc

如何在PYTHON中使用read和Search编写字段categ_id?我总是犯错误。我需要这样做,因为我必须将这些信息转移到另一个数据库Odoo中

导入xmlrpc.client 导入时间 url_db1=http://localhost:8069 db_1='db_ONE' 用户名\u db\u 1='username' 密码\u db\u 1='password' common_1=xmlrpc.client.ServerProxy'{}/xmlrpc/2/common'.formaturl_db1 models_1=xmlrpc.client.ServerProxy'{}/xmlrpc/2/object'.formaturl_db1 version_db1=common_1.version 打印详细信息..,版本号\u db1 url_db2=http://localhost:806972 db_2='db_2' 用户名\u db\u 2='myemail' 密码\u db\u 2='mypassword' common_2=xmlrpc.client.ServerProxy'{}/xmlrpc/2/common'.formaturl_db2 models_2=xmlrpc.client.ServerProxy'{}/xmlrpc/2/object'.formaturl_db2 version_db2=common_2.version printdetails..,db2版本 uid\u db1=common\u 1.authenticatedbu 1,用户名\u db\u 1,密码\u db\u 1,{} uid_db2=common_2.authenticatedbu 2,username_db_2,password_db_2,{} db_1_categories=models_1.execute_kwdb_1,uid_db1,密码_db_1,'product.category','search_read',[[[]],{'fields':['id','name','parent_id']} 总计数=0 对于db_1_类别中的类别: 打印类别..,类别 总计数+=1 值={} 值['id']=类别['id'] 值['name']=类别['name'] 如果类别['parent_id']: 值['parent_id']=类别['parent_id'][0] new_lead=models_2.execute_kwdb_2,uid_db2,password_db_2,'product.category','create',[values] printTotal已创建..,总计数 这就是错误: ValidationError:'操作无法完成:另一个模型要求删除该记录。如果可能,请将其存档。\n\n模型:产品类别Product.Category,约束:产品\u类别\u父项\u id\u fkey',无\n'>


方法名称应为

例如:

models.execute_kwdb、uid、密码、, 'product.template'、'search_read', [], {'fields':['name','default_code','categ_id']} 它应该返回一个dict列表,categu_id字段值是两个值的列表,第一个是类别的id,第二个是类别的名称

要分类id,只需向write方法提供category id

例如:

产品模板数据=[{'default_code':'FURN_6666','categ_id':[8','All/Saleable/Office Furniture','id':23','name':'Acoustic Bloc Screens'},] 对于产品模板数据中的ptd: models.execute_kwdb,uid,密码,'product.template','write', [[ptd['id']], { “类别id”:ptd[“类别id]”[0], ... } ] 您提到需要将数据传输到另一个数据库,产品模板可能不存在,这意味着您不能调用write方法,您可以调用该方法

例如:

id=models.execute\u kwdb,uid,密码,'product.template','create'[{ “类别id”:ptd[“类别id]”[0], ... }] 编辑: 您将使用以下命令获得无效语法错误:

[产品,'categ_id':产品['categ_id'][0],] 要将值传递给create方法,需要将args作为列表传递给execute_kw方法,然后将值作为该列表中的字典传递

编辑:

值={} 值['name']=产品['name'] 值['categ_id']=产品['categ_id'][0] ... new_lead=models_2.execute_kwdb_2,uid_db2,password_db_2,'product.template','create',[values] 编辑:在新数据库中使用父类别id

当我们调用create方法时,它将创建一个新记录并返回其ID,该ID可能与通过值字典传递的ID不同

为了避免ValidationError,可以使用字典,其中旧数据库中的父ID是键,新ID是值,然后在创建新类别时只需传递该值

类别_id={} 对于db_1_类别中的类别: 打印类别..,类别 总计数+=1 值={} 值['id']=类别['id'] 值['name']=类别['name'] 如果类别['parent_id']: 值['parent_id']=category_id[category['parent_id'][0]] category_id=models_2.execute_kwdb_2,uid_db2,password_db_2,'product.category','create',[values] 类别id[类别['id']]=类别id
方法名称应为

例如:

models.execute_kwdb、uid、密码、, 'product.template'、'search_read', [], {'fields':['name','default_code','categ_id']} 它应该返回一个dict列表,categu_id字段值是两个值的列表,第一个是类别的id,第二个是类别的名称

要分类id,只需向write方法提供category id

例如:

产品 emplate_data=[{'default_code':'FURN_6666','categ_id':[8','All/Saleable/Office Furniture','id':23','name':'Acoustic Bloc Screens'},] 对于产品模板数据中的ptd: models.execute_kwdb,uid,密码,'product.template','write', [[ptd['id']], { “类别id”:ptd[“类别id]”[0], ... } ] 您提到需要将数据传输到另一个数据库,产品模板可能不存在,这意味着您不能调用write方法,您可以调用该方法

例如:

id=models.execute\u kwdb,uid,密码,'product.template','create'[{ “类别id”:ptd[“类别id]”[0], ... }] 编辑: 您将使用以下命令获得无效语法错误:

[产品,'categ_id':产品['categ_id'][0],] 要将值传递给create方法,需要将args作为列表传递给execute_kw方法,然后将值作为该列表中的字典传递

编辑:

值={} 值['name']=产品['name'] 值['categ_id']=产品['categ_id'][0] ... new_lead=models_2.execute_kwdb_2,uid_db2,password_db_2,'product.template','create',[values] 编辑:在新数据库中使用父类别id

当我们调用create方法时,它将创建一个新记录并返回其ID,该ID可能与通过值字典传递的ID不同

为了避免ValidationError,可以使用字典,其中旧数据库中的父ID是键,新ID是值,然后在创建新类别时只需传递该值

类别_id={} 对于db_1_类别中的类别: 打印类别..,类别 总计数+=1 值={} 值['id']=类别['id'] 值['name']=类别['name'] 如果类别['parent_id']: 值['parent_id']=category_id[category['parent_id'][0]] category_id=models_2.execute_kwdb_2,uid_db2,password_db_2,'product.category','create',[values] 类别id[类别['id']]=类别id
首先,代码中存在错误

这是你的密码 db_1_products=models_1.execute_kwdb_1,uid_db1,password_db_1,'product.template','search_read',[[[]],{'fields':['id','name','categ_id','type','default code','list_price','website_url','inventory_availability','website_description']

total_count = 0
for product in db_1_products:
    print("produt..", product)
    total_count +=1
    new_lead = models_2.execute_kw(db_2, uid_db2, password_db_2, 'product.template', 'create', [product,'categ_id': product['categ_id'][0],])
total_count = 0
for product in db_1_products:
    print("produt..", product)
    total_count +=1
    new_lead = models_2.execute_kw(db_2, uid_db2, password_db_2, 'product.template', 'create', [{product,'categ_id': product['categ_id'][0]}])
printTotal已创建..,总计数

这是更新的代码 db_1_products=models_1.execute_kwdb_1,uid_db1,password_db_1,'product.template','search_read',[[[]],{'fields':['id','name','categ_id','type','default code','list_price','website_url','inventory_availability','website_description']

total_count = 0
for product in db_1_products:
    print("produt..", product)
    total_count +=1
    new_lead = models_2.execute_kw(db_2, uid_db2, password_db_2, 'product.template', 'create', [product,'categ_id': product['categ_id'][0],])
total_count = 0
for product in db_1_products:
    print("produt..", product)
    total_count +=1
    new_lead = models_2.execute_kw(db_2, uid_db2, password_db_2, 'product.template', 'create', [{product,'categ_id': product['categ_id'][0]}])
printTotal已创建..,总计数


在odoo中创建任何模型时,都需要传递字典。

首先,代码中存在错误

这是你的密码 db_1_products=models_1.execute_kwdb_1,uid_db1,password_db_1,'product.template','search_read',[[[]],{'fields':['id','name','categ_id','type','default code','list_price','website_url','inventory_availability','website_description']

total_count = 0
for product in db_1_products:
    print("produt..", product)
    total_count +=1
    new_lead = models_2.execute_kw(db_2, uid_db2, password_db_2, 'product.template', 'create', [product,'categ_id': product['categ_id'][0],])
total_count = 0
for product in db_1_products:
    print("produt..", product)
    total_count +=1
    new_lead = models_2.execute_kw(db_2, uid_db2, password_db_2, 'product.template', 'create', [{product,'categ_id': product['categ_id'][0]}])
printTotal已创建..,总计数

这是更新的代码 db_1_products=models_1.execute_kwdb_1,uid_db1,password_db_1,'product.template','search_read',[[[]],{'fields':['id','name','categ_id','type','default code','list_price','website_url','inventory_availability','website_description']

total_count = 0
for product in db_1_products:
    print("produt..", product)
    total_count +=1
    new_lead = models_2.execute_kw(db_2, uid_db2, password_db_2, 'product.template', 'create', [product,'categ_id': product['categ_id'][0],])
total_count = 0
for product in db_1_products:
    print("produt..", product)
    total_count +=1
    new_lead = models_2.execute_kw(db_2, uid_db2, password_db_2, 'product.template', 'create', [{product,'categ_id': product['categ_id'][0]}])
printTotal已创建..,总计数


在odoo中创建任何模型时,都需要通过字典。

嗨,我只是想知道现在这些问题从何而来?外部API在v13中有自己的部分,您的问题就在这里。您好@CZoellner,是的,我阅读了文档,但我需要将categ_id从一个数据库Odoo传输到另一个数据库,比如:您好,我只是想知道现在这些问题来自哪里?外部API在v13中有自己的部分,您的问题是。您好@CZoellner,是的,我阅读了文档,但我需要将categ_id从一个数据库Odoo传输到另一个数据库,如:很好的答案,但我不建议在最后创建模板。通常,您应该在第一个Odoo中的任何位置都有一个外部模板ID,因此您应该知道另一个Odoo的模板。@Kenly谢谢,您的解释非常详细,但不起作用。我更新了我的问题,并把代码显示给你。我需要在2个数据库之间传输字段categu_id。我尝试了你的解决方案,但仍然有一个错误。@Kenly函数读取和搜索工作正常,但在创建过程中,它会被阻止。嗨@Kenly,你是一个很好的人,我会尝试你的解决方案,并告诉你:DHi@Kenly,很抱歉,最近发生了一个错误,在我向你展示任何东西之前,我试图更正它,但无论我怎么尝试,都是同一个错误。我真的照你说的做了。。。我会更新我的帖子,看看你的我的代码和错误…答案不错,但我不建议在最后创建一个模板。通常你应该已经有一个e
外部模板ID位于第一个Odoo中的任何位置,因此您应该知道另一个Odoo的模板。@Kenly谢谢,您的解释非常详细,但不起作用。我更新了我的问题,并把代码显示给你。我需要在2个数据库之间传输字段categu_id。我尝试了你的解决方案,但仍然有一个错误。@Kenly函数读取和搜索工作正常,但在创建过程中,它会被阻止。嗨@Kenly,你是一个很好的人,我会尝试你的解决方案,并告诉你:DHi@Kenly,很抱歉,最近发生了一个错误,在我向你展示任何东西之前,我试图更正它,但无论我怎么尝试,都是同一个错误。我真的照你说的做了。。。我会更新我的帖子,看看你的我的代码和错误…嗨@patel,谢谢你的回复,但不是那样,请看Kenly的回复,他的解决方案有效。嗨@patel,谢谢你的回复,但不是那样,请看Kenly的回复,他的解决方案有效