簡體   English   中英

如何通過 Odoo 13 中的 xmlrpc 在特定記錄上調用沒有參數(self 除外)的 Odoo 模型的方法?

[英]How to call an Odoo model's method with no parameter(except self) on a specific record through xmlrpc in Odoo 13?

我正在開發一個腳本來在 Odoo 的model中創建記錄。 我需要在特定記錄上運行這個模型的方法。 在我的情況下,我需要在特定記錄上運行的方法沒有任何參數(只有self )。 我想知道如何通過從客戶端到 Odoo 服務器xmlrpc調用在 model 的特定記錄上運行該方法。 下面是我嘗試調用該方法並傳遞有關此問題的特定記錄的 id 的方式。

xmlrpc_object.execute('test_db', user, 'admin', 'test.test', 'action_check_constraint', [record_id])

action_check_constraint檢查 model 的每條記錄上的一些約束,如果所有約束都通過,則更改記錄的 state 或引發驗證錯誤。 但是上面使用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客戶端到Odoo服務器在特定記錄上調用模型方法(除了self之外沒有參數)的正確和最佳方式嗎?

引發該錯誤,因為 xmlrpc 庫不允許None作為默認返回值。 但是你應該通過允許它來改變這種行為。

以下行來自Odoo 的外部 API 文檔,擴展為允許None作為返回值:

models = xmlrpc.client.ServerProxy(
    '{}/xmlrpc/2/object'.format(url), allow_none=True)

有關 xmlrpc ServerProxy的更多信息,請查看python 文檔

如果action_check_constraint不返回任何內容(默認為None ),您可能會收到錯誤消息。

嘗試使用設置為debug_rpc_answerlog-level選項運行服務器以獲取更多詳細信息。

在失去搜索並首先嘗試后,我使用此修復程序來解決錯誤,但我認為此修復程序不是最佳實踐。 所以,我發現OdooRPC做同樣的工作,但它處理了上述情況,並且返回None的 model 方法沒有這樣的錯誤。 使用OdooRPC解決了我的問題,我在 Odoo 中完成了我需要使用xmlrpc做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM