[英]Using Odoo External API, is it possible to filter by a field that is equal to array of values?
我知道如何按值過濾,但我不知道如何按值數組過濾(即應用過濾器的字段包含數組)。
我使用 Odoo 15.0 和 XML-RPC 來獲得對其數據庫的外部訪問。
在此文檔中,我發現了如何獲取按值過濾的記錄:
XmlRpcClient client = new XmlRpcClient();
XmlRpcClientConfigImpl common_config = new XmlRpcClientConfigImpl();
String path = "https://my-domain.odoo.com";
common_config.setServerURL(new URL(String.format("%s/xmlrpc/2/common", path)));
int uid = (int) client.execute(common_config, "authenticate",
asList(db_name, login, password, emptyMap()));
final XmlRpcClient models = new XmlRpcClient() {{
setConfig(new XmlRpcClientConfigImpl() {{
setServerURL(new URL(String.format("%s/xmlrpc/2/object", path)));
}});
}};
List<Object>listProds = asList((Object[]) models.execute("execute_kw", asList(
db_name, uid, password,
"product.pricelist.item", "search_read",
asList(asList(
asList("fixed_price", "=", 0.09) // <-- filter setting
)),
new HashMap() {{
put("fields", asList(
"id", "pricelist_id", "fixed_price", "name"
));
put("limit", 300);
}}
)));
System.out.println("Read some fields for the products: " + listProds2);
例如,使用上面的代碼,我得到所有帶有fixed_price = 0.09
的行:
但我需要按pricelist_id
過濾等於[2, Catalogue Price (CAD)]
,它是Object[]
的字符串表示形式。 該值本身就是一個數組,在這里我被卡住了。
我嘗試了過濾器語法的不同變體,但都沒有奏效。
asList("pricelist_id", "=", asList(2, "Catalogue Price (CAD)"))
// or
asList("pricelist_id", "=", new Object[] {2, "Catalogue Price (CAD)"})
給
psycopg2.errors.InvalidTextRepresentation:integer 類型的輸入語法無效:“%Catalogue Price (CAD)%” LINE 1: ...ND ("product_pricelist_item"."pricelist_id" in (2,'%Catalogu...
並且以下語法變體沒有任何效果,就好像過濾器不存在一樣:
asList("pricelist_id", "=", (new Object[]{2, "Catalogue Price (CAD)"}).toString())
asList("pricelist_id", "like", "%Catalogue Price (CAD)%")
asList("pricelist_id", "=", "2, Catalogue Price (CAD)")
asList("pricelist_id", "=", "[2, Catalogue Price (CAD)]")
可以通過包含“目錄價格 (CAD)”的pricelist_id
進行過濾(其中一個數組值就足夠了,因為它們是唯一的)。
默認情況下,Odoo 在讀取many2one 字段時會返回(record id, record display_name)
要使用 many2one 字段過濾結果,您需要使用數據庫 id ( 2
),例如:
("pricelist_id", "=", 2)
您還可以使用in
運算符按價目表 ID 列表進行過濾:
("pricelist_id", "in", list_of_ids )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.