Ошибка Odoo: TypeError: объект «int» не является итерируемым

Я создаю функцию в модуле счета. Что вам нужно сделать, так это сделать так, чтобы эта линейка продуктов функции была равна счету-фактуре и возвращала сумму за продукт. Это лучше поясняется на следующем изображении:

введите здесь описание изображения

Например, продукт "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 не является итерируемым

Большое спасибо за вашу помощь и потраченное время. Я ценю любые предложения или советы, чтобы получить то, что вы хотите сделать.


person beriliox    schedule 06.04.2016    source источник
comment
Дело в том, что если вы сохраните его в целочисленном поле, у вас будет только 1 счетчик для каждого счета. Это вам не поможет, вам нужно сделать функцию для отчета. В любом случае, вторая итерация вам не нужна, с первой вы уже в очереди. Что вам нужно сделать, так это сохранить продукт, например, в словаре, и, если ключ уже существует, добавить сумму в этот словарь. Тем не менее, вы не можете сохранить его как поле.   -  person dccdany    schedule 06.04.2016


Ответы (2)


Кажется, вы пытаетесь зациклить целое число. Если вы хотите увеличить счетчик, попробуйте зациклить его на объекте. Для примера:

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

Таким образом, вы можете пройти через объект, и если вам нужно получить идентификатор каждого продукта, вы можете получить его с помощью product.id внутри цикла.

person Hari Prasad    schedule 07.04.2016

На самом деле у вас проблема с циклом for. вы пытаетесь зациклить целое число. po.product_id.id является целым числом, поэтому я думаю, что нет необходимости использовать этот цикл for, даже если вы хотите использовать цикл for следующим образом: for product in [po.product_id.id]:

Спасибо

person Mahendra Barad    schedule 07.04.2016