首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特定过滤器和计算方法映射场景- Odoo v8

特定过滤器和计算方法映射场景- Odoo v8
EN

Stack Overflow用户
提问于 2017-08-26 23:49:11
回答 2查看 459关注 0票数 0

假设我在stock_move上有一个名为stock_move的字段,这个字段是Boolean类型的,我可以使用域过滤器创建一个方法,它将带所有stock_move对象和('isbn', '=', 'True'),,并在另一个字段上反映这种计算,如下所示:

代码语言:javascript
复制
@api.multi
@api.depends('stock_move')
def _compute_amount_total(self):
    draft_orders = self.env['stock.move'].search([('isbn', '=', True)])
    product_uom_qty = sum(draft_orders.mapped('product_uom_qty'))
    for record in self:
        record.total_isbn = product_uom_qty

因此,到目前为止,这是一种很好的方法,但是现在,假设我想这样做,但不是对检查isbn字段的所有isbn字段,而是针对我从模型中调用的stock_moves,比如模型中的4个Many2one字段:

代码语言:javascript
复制
stock_move1 = fields.Many2one('stock.move', string="My Stock Move 1")
stock_move2 = fields.Many2one('stock.move', string="My Stock Move 2")
stock_move3 = fields.Many2one('stock.move', string="My Stock Move 3")
stock_move4 = fields.Many2one('stock.move', string="My Stock Move 4")

不过,我可以像这样在我的模型上调用isbn字段:

代码语言:javascript
复制
stock_move1 = fields.Many2one('stock.move', string="My Stock Move 1")
isbn1 = fields.Boolean(string="ISBN 1", related="stock_move1.isbn")
stock_move2 = fields.Many2one('stock.move', string="My Stock Move 2")
isbn2 = fields.Boolean(string="ISBN 2", related="stock_move2.isbn")
stock_move3 = fields.Many2one('stock.move', string="My Stock Move 3")
isbn3 = fields.Boolean(string="ISBN 3", related="stock_move3.isbn")
stock_move4 = fields.Many2one('stock.move', string="My Stock Move 4")
isbn4 = fields.Boolean(string="ISBN 4", related="stock_move4.isbn")

这应该会带来它们,但实际上我不想在我的视图中显示它们或任何东西,只需阅读4 stock_moves查找isbn = True和sum product_uom_qty在它们上。

我希望我已经解释清楚了。

对于如何实现这一点,有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-27 15:50:14

也许是这样的:

代码语言:javascript
复制
@api.multi
@api.depends(
    'stock_move1.isbn', 'stock_move1.product_uom_qty',
    'stock_move2.isbn', 'stock_move2.product_uom_qty',
    'stock_move3.isbn', 'stock_move3.product_uom_qty',
    'stock_move4.isbn', 'stock_move4.product_uom_qty')
def _compute_amount_total(self):
    for record in self:
        moves = (record.stock_move1 +
            record.stock_move2 +
            record.stock_move3 +
            record.stock_move4).filtered('isbn')
        record.total_isbn = sum(moves.mapped('product_uom_qty'))

根据我从您的描述中了解到的内容,您实际上并不了解与isbn1..4相关的字段。

票数 2
EN

Stack Overflow用户

发布于 2017-08-27 17:02:56

我想“naglis jonailis”已经回答了你的问题。您可能会得到一些错误,因为他没有检查值是否为空,而是直接连接字段。

代码语言:javascript
复制
                total_quantity = 0
                # check if the field is selected and add the quantity 
                if rec.many2one_field :
                      total_quantity =+ rec.many2one_field.product_uom_qty


                # affect the sum to your computed field
                 rec.compute_sum_field = total_quantity

以及为什么使用四个many2one使用many2many,用户可以选择多个股票移动。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45900600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档