从自定义模块读取草稿状态下的所有 sale.order 个对象 - Odoo v8

Read all sale.order objects on draft state from a custom module - Odoo v8

如何从相关字段中读取处于 'draft' 状态的所有 sale.order 个对象?

我试过这个:

class account_budget_bsi(models.Model):

    _name = 'account.budget.bsi'

    _inherit = ['crossovered.budget', 'sale.order', 'stock.location', 'stock.move', 'purchase.order']

    sale_order = fields.Many2one('sale.order')
    sales_bsi = fields.Many2one('sale.order' , related="sale_order.state.draft", string="Sales Planned")

但它并没有像看起来那样工作。

知道如何实现吗?

我的意思是,问题是所有销售订单都必须处于 'draft' 状态,我知道可能 Many2one 相关字段不起作用,因为 'state' 是一个选择,但是不知道如何加载它。

这不是相关字段的用途。您应该使用这样的计算字段来实现此目的:

sales_bsi =  fields.One2many('sale.order',
             compute="_compute_sales_bsi")

@api.one
def _compute_sales_bsi(self):
    self.sales_bsi = self.env['sale.order'].search([('state', '=', 'draft')])

它的作用是在 sale.order 模型中搜索处于草稿状态的记录,并将它们添加到字段 sales_bsi 中。如果我没理解错,那就是你想要达到的目的。

如何使用related

Related 仅用于加载另一个对象字段的实际值。该字段必须与您建立关系的字段类型相同。

示例:

sales_state = fields.Selection(related='sales_order.state')

一旦您选择 sales_ordersales_state 字段将自动加载 sales_order 的相关 state

如何限制选择

现在,至于你真正想做什么。您是否只想允许 sales_order 字段 select 处于草稿状态的销售订单?如果是这样,您想使用 domain

sales_order = fields.Many2one('sale.order', domain=[('state', '=', 'draft')])

Read up on domain here

跟进问题

_inherit = ['crossovered.budget', 'sale.order', 'stock.location', 'stock.move', 'purchase.order']

你为什么要继承这么多东西?当然没有必要继承所有这些。