簡體   English   中英

使用 Odoo 外部 API,是否可以按等於值數組的字段進行過濾?

[英]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.

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