如何在 Odoo 11 中以编程方式取消 sale.order

How to programmatically cancel sale.order in Odoo 11

我想删除 Odoo 11 中的所有销售 Order/Quotations。

对于引用,我使用 Odoo GUI 来批量删除它们。但是对于销售订单,我必须先取消它们才能删除。这通过 GUI 方式非常耗时(因为我们无法批量取消销售订单)。

所以我认为以编程方式执行此操作会更好(就时间而言)。但是,当前代码

orders = self.env['sale.order'].search([('external_id', '!=', '')])
for order in orders:
    order.unlink()

引发异常

You can not delete a sent quotation or a sales order! Try to cancel it before.

如何在 unlink() 之前取消 order

已解决。在深入研究 odoo 源代码之后。我想这就是我要找的:

orders = self.env['sale.order'].search([('external_id', '!=', '')])
for order in orders:
    order.action_cancel()
    order.unlink()