2016-04-06 3 views
1

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

enter image description here

Например, продукт «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 

Для функции различать одного продукта и другой, я использую модель product.product идентификатор поля. Но когда я пытаюсь создать счет-фактуру, Оду показывает мне, что поля типа сообщения не могут быть итерабельными. Это проблема, потому что поле id для дифференцирования продуктов является целым числом.

Что мне делать?

Это сообщение, показывающее Odoo:

for product in po.product_id.id: 

TypeError: int object is not iterable

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

+0

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

ответ

0

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

Благодаря

1

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

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

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

Смежные вопросы