【问题标题】:Odoo Error: TypeError: 'int' object is not iterableOdoo 错误:TypeError:'int' 对象不可迭代
【发布时间】:2016-04-06 14:52:50
【问题描述】:

我正在发票模块中创建一个函数。你应该做的是让这个功能产品线是相等的发票并返回每个产品的金额。下图更好地解释了这一点:

例如,产品“Aceite Hidraulico”在发票上出现了 3 次。那么该函数应该为这个产品返回一个 3。

嗯,这就是我在 account.invoice.py 中的功能:

total_quantity = fields.Integer(compute='count_invoice_invoice', string = 'Cantidad Productos', readonly = True, store=True)

@api.one
@api.depends('invoice_line_ids.product_id')
def count_invoice_invoice(self):
    res = {}
    counter = 0
    for po in self.invoice_line_ids:
        for product in po.product_id.id:
            counter += 1
            res [self.total_quantity] = counter
    return res

对于区分一种产品和另一种产品的功能,我使用 id 字段 product.product 模型。但是当我尝试创建发票时,Odoo 向我显示一条消息 int 类型字段不能是可迭代的。这是一个问题,因为区分产品的 id 字段是一个整数。

我该怎么办?

这是显示 Odoo 的消息:

for product in po.product_id.id:

TypeError: int 对象不可迭代

非常感谢您的帮助和所花费的时间。我很感激任何建议或建议,以获得您想要做的事情。

【问题讨论】:

  • 问题是,如果将其存储在整数字段中,则每张发票将只有 1 个计数。它不会帮助你,你要做的就是为报告创建一个函数。无论如何,你不需要第二次迭代,第一次迭代你已经在行了。您要做的是将产品保存在例如字典中,如果键已经存在,则将数量添加到该字典中。您仍然不能将其保存为字段。

标签: python openerp odoo-9


【解决方案1】:

似乎您正在尝试循环整数。如果要增加计数器,请尝试在对象上循环它。 例如:

for po in self.invoice_line_ids:
    for product in po.product_id:
        counter += 1
        res [self.total_quantity] = counter
return res

通过这种方式,您可以循环访问对象,如果您需要获取每个产品 id,您可以通过循环内的 product.id 来获取它。

【讨论】:

    【解决方案2】:

    实际上你的 for 循环有问题。 您正在尝试整数循环。 po.product_id.id 是整数 所以我认为即使你想像这样使用 for 循环也没有必要使用那个 for 循环: [po.product_id.id]中的产品:

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-17
      • 2020-11-28
      • 2017-09-11
      • 1970-01-01
      • 2023-01-22
      • 2018-09-29
      • 2020-02-26
      相关资源
      最近更新 更多