Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何调用Odoo模型';通过Odoo 13中的xmlrpc在特定记录上不带参数(除了self)的方法?_Python_Odoo_Xml Rpc - Fatal编程技术网

Python 如何调用Odoo模型';通过Odoo 13中的xmlrpc在特定记录上不带参数(除了self)的方法?

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

我正在开发一个脚本,以便在Odoo模型中创建记录。我需要在特定记录上运行此模型的方法。在我的例子中,我需要在特定记录上运行的方法没有任何参数(只有
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()