Python 如何调用Odoo模型';通过Odoo 13中的xmlrpc在特定记录上不带参数(除了self)的方法?
我正在开发一个脚本,以便在Odoo模型中创建记录。我需要在特定记录上运行此模型的方法。在我的例子中,我需要在特定记录上运行的方法没有任何参数(只有Python 如何调用Odoo模型';通过Odoo 13中的xmlrpc在特定记录上不带参数(除了self)的方法?,python,odoo,xml-rpc,Python,Odoo,Xml Rpc,我正在开发一个脚本,以便在Odoo模型中创建记录。我需要在特定记录上运行此模型的方法。在我的例子中,我需要在特定记录上运行的方法没有任何参数(只有self)。我想知道如何通过xmlrpc从客户机到Odoo服务器的调用,在模型的特定记录上运行该方法。下面是我试图调用该方法并传递特定记录的id的方式 action\u check\u constraint检查模型每个记录上的一些约束,如果所有约束都已传递,则会更改记录的状态或引发验证错误。但是上面使用xmlrpc调用的方法会引发以下错误: xmlrp
self
)。我想知道如何通过xmlrpc
从客户机到Odoo服务器的调用,在模型的特定记录上运行该方法。下面是我试图调用该方法并传递特定记录的id的方式
action\u check\u constraint
检查模型每个记录上的一些约束,如果所有约束都已传递,则会更改记录的状态或引发验证错误。但是上面使用xmlrpc
调用的方法会引发以下错误:
xmlrpc.client.Fault: <Fault cannot marshal None unless allow_none is enabled: 'Traceback (most recent call last):\n File "/home/ibrahim/workspace/odoo13/odoo/odoo/addons/base/controllers/rpc.py", line 60, in xmlrpc_1\n response = self._xmlrpc(service)\n File "/home/ibrahim/workspace/odoo13/odoo/odoo/addons/base/controllers/rpc.py", line 50, in _xmlrpc\n return dumps((result,), methodresponse=1, allow_none=False)\n File "/usr/local/lib/python3.8/xmlrpc/client.py", line 968, in dumps\n data = m.dumps(params)\n File "/usr/local/lib/python3.8/xmlrpc/client.py", line 501, in dumps\n dump(v, write)\n File "/usr/local/lib/python3.8/xmlrpc/client.py", line 523, in __dump\n f(self, value, write)\n File "/usr/local/lib/python3.8/xmlrpc/client.py", line 527, in dump_nil\n raise TypeError("cannot marshal None unless allow_none is enabled")\nTypeError: cannot marshal None unless allow_none is enabled\n'>
> /home/ibrahim/workspace/scripts/automate/automate_record_creation.py(328)create_record()
xmlrpc.client.Fault:
>/home/ibrahim/workspace/scripts/automatic/automatic\u record\u creation.py(328)create\u record()
任何人都可以通过
xmlrpc
client-to-Odoo-server对特定记录调用模型方法(除self
之外没有参数)的正确和最佳方式提供帮助吗?这会引发错误,因为xmlrpc库不允许将None
作为默认返回值。但你应该通过允许它来改变这种行为
以下行来自,扩展为允许None
作为返回值:
models=xmlrpc.client.ServerProxy(
“{}/xmlrpc/2/object”。格式(url),allow_none=True)
有关xmlrpc
ServerProxy
的更多信息,请查看如果操作检查约束
未返回任何内容(默认情况下无
),则会出现错误
尝试在
日志级别
选项设置为debug\u rpc\u answer
的情况下运行服务器,以获取更多详细信息。在失去搜索后,请先尝试解决错误,但我认为此修复不是最佳做法。因此,我找到了做相同工作的方法,但它处理了上述情况,对于返回None
的模型方法,没有这样的错误。使用OdooRPC解决了我的问题,我在Odoo中使用xmlrpc做了我需要做的事情。你是对的,但问题是我添加了allow\u none=True
,但是当我在本例中的方法action\u check\u constraint
没有显式返回任何内容时,仍然存在错误xmlrpc\u objects=client.ServerProxy('http://'+'localhost:8000/xmlrpc/object',allow\u none=True)
。在这种情况下,我应该怎么做?在python中不返回任何内容就是返回None
()方法返回的内容是正确的。现在我添加了allow_none=True
,由于一些顾虑,我无法修改Odoo方法来添加显式返回。此外,错误仍然存在。Odoo显式禁用控制器中的None
类型。GitHub中有一个与a相关的Odoo问题。我阅读了所有这些答案,明白了你的意思。但我的问题是,使用allow_none=True并不能解决问题。另外,因为我不允许对该项目的源代码进行更改,所以我不能修改这些方法以返回除“无”之外的任何内容。那么,我还能做什么呢?仅在客户端启用该选项将无法工作,正如您在注释中所看到的:因为它是一个可选功能,必须在客户端和服务器上都启用它,否则无论哪一方不支持它,它都将崩溃。当然,还有一个问题,如果服务器上允许这样做,它会破坏客户机的预期,因此这有点棘手。
xmlrpc.client.Fault: <Fault cannot marshal None unless allow_none is enabled: 'Traceback (most recent call last):\n File "/home/ibrahim/workspace/odoo13/odoo/odoo/addons/base/controllers/rpc.py", line 60, in xmlrpc_1\n response = self._xmlrpc(service)\n File "/home/ibrahim/workspace/odoo13/odoo/odoo/addons/base/controllers/rpc.py", line 50, in _xmlrpc\n return dumps((result,), methodresponse=1, allow_none=False)\n File "/usr/local/lib/python3.8/xmlrpc/client.py", line 968, in dumps\n data = m.dumps(params)\n File "/usr/local/lib/python3.8/xmlrpc/client.py", line 501, in dumps\n dump(v, write)\n File "/usr/local/lib/python3.8/xmlrpc/client.py", line 523, in __dump\n f(self, value, write)\n File "/usr/local/lib/python3.8/xmlrpc/client.py", line 527, in dump_nil\n raise TypeError("cannot marshal None unless allow_none is enabled")\nTypeError: cannot marshal None unless allow_none is enabled\n'>
> /home/ibrahim/workspace/scripts/automate/automate_record_creation.py(328)create_record()