Odoo 13 - 搜索方法 - 使用模型相关字段的“订单”属性

Posted

技术标签:

【中文标题】Odoo 13 - 搜索方法 - 使用模型相关字段的“订单”属性【英文标题】:Odoo 13 - Search method - use of 'order' attribute for the model's related fields 【发布时间】:2021-12-28 10:20:49 【问题描述】:

我有 2 个模型,更像下面的示例

模型 1 - 发票

invoice_num = fields.Char(String='Invoice Number')
payment_method = fields.Char(String='Payment Method')
payment_date = fields.Datetime(String='Invoice Payment Date')
paid_by_id = fields.Many2one('user_details', String='Paid by user ID')
.
.
.

模型 2 - user_details

first_name = fields.Char(String='First Name')
last_name = fields.Char(String='Last Name')
age = fields.Integer()
.
.
.

我正在尝试使用以下搜索条件从发票模型中获取所有记录

域过滤器 - payment_method = 'Cash' &paid_by_id.age > 25

订单 -paid_by_id.first_name desc

偏移量 - 200

限制 - 10

对于上述情况,原始查询类似于

SELECT * FROM invoice inv
JOIN user_details ud ON inv.paid_by_id = ud.id
WHERE inv.payment_method = 'Cash' and ud.age > 25
ORDER BY ud.first_name
OFFSET 200 LIMIT 10;

我尝试为相同的对象编写 ORM

records = request.env['invoice'].sudo().search([('payment_method', '=', 'Cash'), ('paid_by_id.age', '>', 25)], order='paid_by_id.first_name desc', offset=200, limit=10)

但是,我收到以下错误-

'Invalid "order" specified. A valid "order" specification is a comma-separated list of valid field names (optionally followed by asc/desc for the direction)'

那么,如何使用 'order' 属性获取模型相关字段的记录?

【问题讨论】:

有趣的问题!但是,是的,Odoo 对order 参数的内容非常严格。如果您想获得“扩展”问题的答案(答案下方的评论中的信息),您应该问另一个问题。但我敢打赌,答案是:使用存储的相关/计算字段或使用查询。 【参考方案1】:

order 必须是以逗号分隔的有效字段名称列表,后跟可选的 ASCDESC 方向。

您不能使用带点的名称(关系字段的字段)。

【讨论】:

感谢您的回复。我想避免从数据库中获取所有记录(比如 50000 行)并对其进行操作。因为,如您所见,(出于分页目的)我使用 'offset' 和 'limit' 属性仅获取有限数量的行。因此,在获取记录时应该进行排序和偏移。如果我在获取的记录集上使用排序函数,我将无法获得预期的记录列表,因为某些记录已经使用偏移量和限制被跳过。 对不起,我没有考虑偏移量和顺序,我更新了我的答案 尝试使用代码的永久链接,因为它会随着时间的推移而改变,并且总是尝试将该代码的重要部分“复制”到您的答案中,因为它可能会消失。 @DipenShah 重要的部分是文档字符串,我已经复制了它。验证完成的是_generate_order_by_inner 方法,并且在他们尝试匹配订单字符串时恰好在_check_qorder 中。

以上是关于Odoo 13 - 搜索方法 - 使用模型相关字段的“订单”属性的主要内容,如果未能解决你的问题,请参考以下文章

One2many 字段显示 Odoo13 中的空条目/记录

odoo 翻译文件

odoo14-实际使用

Odoo 13 错误:交换到树视图时需要单例

Odoo 13 Enterprise SaaS,我可以编辑产品搜索模块以仅使用 JavaScript 搜索产品描述吗?

odoo12 通过python代码控制xml界面,更改字段属性(fields_view_get方法使用)