首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Odoo划分两个浮点型字段- AttributeError

Odoo划分两个浮点型字段- AttributeError
EN

Stack Overflow用户
提问于 2020-07-11 17:36:45
回答 1查看 169关注 0票数 1

有没有人可以帮我解决下面的问题:我正在尝试划分两个浮点型字段,但是我得到了一个错误

代码语言:javascript
复制
AttributeError: 'stock.picking' object has no attribute 'calculate_reserved_per'

下面是我的代码:

代码语言:javascript
复制
from odoo import models, fields, api

class PickingTotalQty(models.Model):
    _inherit = 'stock.picking'

    sum_dmd_qty = fields.Float(compute='calculate_dmd_qty', string='Total Demand Quantity')
    sum_reserved_qty = fields.Float(compute='calculate_reserved_qty', string='Total Reserved Quantity')
    reserved_qty_per = fields.Float(compute='calculate_reserved_per', string='Reserved Quantity (%)')

    def calculate_dmd_qty(self):
        for rs in self:
            dmdqty = 0
            for line in rs.move_lines:
                dmdqty += line.product_uom_qty
        rs.sum_dmd_qty = dmdqty

    def calculate_reserved_qty(self):
        for rs in self:
            reservedqty = 0
            for line in rs.move_lines:
                reservedqty += line.reserved_availability
        rs.sum_reserved_qty = reservedqty

    @api.depends('sum_reserved_qty', 'sum_dmd_qty')
    def calculate_reserved_per(self):
        for rec in self:
            rec.reserved_qty_per = rec.sum_reserved_qty / rec.sum_dmd_qty
EN

回答 1

Stack Overflow用户

发布于 2020-07-12 02:32:03

如果您已经重启了服务器,那么在除法之前,检查calculate_reserved_per方法的缩进,并确保rec.sum_dmd_qtyZero不同。

您面临的奇怪行为是由于两个方法中最后一行的缩进造成的:calculate_dmd_qtycalculate_reserved_qty,这两个方法将忽略除最后一条记录之外的所有记录。在窗体视图中,使用包含一条记录的记录集调用该方法。

要纠正这一点,请将每个方法的最后一行移动到for循环中。

sum_dmd_qtysum_reserved_qty是分别依赖于move_lines.product_uom_qtymove_lines.reserved_availability的计算字段,应该用来指定何时使用@api.depends重新计算它们的值。

您可以使用会计发票_compute_amount作为参考,并将这三个方法合并到一个计算三个字段的值的方法中。

示例:

代码语言:javascript
复制
@api.depends("move_lines.product_uom_qty", "move_lines.reserved_availability")
def _calculate_quantities(self):
    for picking in self:
        dmd_qty = 0
        reserved_qty = 0
        for move in picking.move_lines:
            dmd_qty += move.product_uom_qty
            reserved_qty += move.reserved_availability

        picking.sum_dmd_qty = dmd_qty
        picking.sum_reserved_qty = reserved_qty

        if picking.sum_dmd_qty:
            picking.reserved_qty_per = picking.sum_reserved_qty / picking.sum_dmd_qty  

我没有使用@api.one,因为它在Odoo13

中不可用

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

https://stackoverflow.com/questions/62847469

复制
相关文章

相似问题

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