python - Odoo14,外部 API:自定义模型在通过 python 访问时有效,但在通过 PHP 访问时无效
问题描述
这是我一直在努力解决的一个非常奇怪的问题。
我创建了一个自定义模型,我需要通过外部 API 访问它。
模型:(我相信功能本身并不重要,还不如只是return "hi"
class StockApi(models.Model):
_name = "stock.api"
@api.model
def get_lot_info(self, vals):
"""
Returns the best before date of the current batch of a product specified by its SKU
"""
val = vals[0]
if val[0].lower() != "sku":
return "sku is needed"
product = self.env['product.product'].search([['default_code','=',val[2]]])
if len(product) == 0:
return "product not found"
product = product[0]
lot = self.env['stock.quant'].search(['&',('product_id', '=', product['id']),('on_hand', '=', True)], order='removal_date asc')
if len(lot) == 0:
return False
return lot[0]['removal_date']
这在通过 python api 访问时有效,我收到删除日期
common = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(url))
uid = common.authenticate(db, username, password, {})
models = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url))
def odoo(*args):
return models.execute_kw(db, uid, password, *args)
odoo(
'stock.api',
'get_lot_info',
[[[
'sku', '=', '1012',
]]]
)
但是,当通过 PHP 使用 ripcord 库访问时,它不起作用:
$common = ripcord::client($this->url.'/xmlrpc/2/common');
$this->uid = $common->authenticate($this->db, $this->username, $this->password, array());
$this->models = ripcord::client($this->url . "/xmlrpc/2/object");
echo var_export( $this->models->execute_kw(
$this->db, $this->uid, $this->password,
'stock.api', 'get_lot_info', array(array(array('sku', '=', '1012')))
), true);
我只是得到这个错误:array( 'faultCode' => 2, 'faultString' => 'Object stock.api doesn\'t exist',)
访问变量(用户名、数据库等)始终相同。PHP API 确实适用于其他模型。我可以成功地拉sale.order
,res.partner
等等,这让我很难理解。
编辑:出于兴趣,我将新模型放在生产服务器上,在那里我也可以使用 PHP 访问它。这有点烦人,因为如果我可以在登台服务器上工作,那就太好了……登台服务器是我的本地 PC。也许问题与这个事实有关。
解决方案
推荐阅读
- java - 如何定期在两种颜色之间进行矩形更改?
- python - Python Tensorflow session.run() 发布 GIL
- listview - Flutter:如何在包含其他类型小部件的 ListView.builder 末尾添加一个按钮小部件?
- javascript - 未选择语言时如何收到错误消息?
- variables - 如何在 emacs elisp .dir-locals.el 中连接字符串?
- java - 为什么 Collections.unmodifiableMap 不检查传递的地图是否已经是 UnmodifiableMap?
- java - 我无法理解联系方式 [] Myfriends line
- objective-c - 如何使用 Objective-C 在 Cocoa 中处理打印事件(通过快捷键 CMD + P)?
- google-chrome - 有没有什么方法可以在不使用 QZ 托盘之类的应用程序的情况下从 Google Chrome 打印到本地网络中的热敏打印机(escpos)?
- c# - 关于使用对象初始化器进行向上转换、继承和设置属性的概念