2016-04-06 44 views
1

Fatura modülünde bir işlev yapıyorum. Yapmanız gereken, bu işlev satırlarının eşit fatura olması ve ürün başına miktarı iade etmektir. Bu daha iyi aşağıdaki resimde açıklanmıştır:Odoo Hata: TypeError: 'int' nesnesi yinelenebilir değil

enter image description here

Örneğin, ürün "Aceite Hidráulico" faturada 3 kez görünür. Daha sonra işlev bu ürün için 3 döndürmelidir.

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 

işlevi ayırt etmek tek ürün ile diğeri arasında, ben kimliği alan product.product modeli kullanmak için:

Eh, bu benim account.invoice.py var fonksiyonudur. Ama faturayı oluşturmaya çalıştığımda, Odoo bana mesaj int tipi alanların iterables olamayacağını gösteriyor. Bu bir problem çünkü ürünleri ayırt etmek için kimlik alanı bir tamsayıdır.

Ne yapmalıyım?

Bu Odoo gösteren mesajdır:

for product in po.product_id.id: 

TypeError: int object is not iterable

geçirdi Yardımlarınız ve zaman için size çok teşekkür ederim. Ne yapmak istediğinizi öğrenmek için önerilerinizi veya tavsiyelerinizi takdir ediyorum.

+0

Bu, bir tamsayı alanında saklarsanız, fatura başına yalnızca 1 adete sahip olursunuz. Size yardımcı olmayacak, yapmanız gereken rapor için bir işlev yapmaktır. Her neyse, ikinci yinelemeye ihtiyacın yok, ilk satırda zaten var. Yapmanız gereken şey, örneğin bir sözlükte ürünü kaydetmek ve zaten var olan anahtarın miktarı sözlüğe eklemektir. Hala bunu bir alan olarak kaydedemezsiniz. – dccdany

cevap

0

Aslında for döngüsünde Sorun var. tamsayı döngüsünde çalışıyorsunuz. yüzden böyle döngü kullanımı için kullanmak istiyorsanız döngü bile düşündüm kullanmaya gerek olduğunu düşünüyorum tam sayıdır po.product_id.id: ürün için [po.product_id.id] içinde:

Teşekkür

1

bir tamsayı üzerinde döngü çalışıyoruz görünüyor. Sayacı artırmak istiyorsanız, nesne üzerinde döngü yapmayı deneyin. Ex için : Bu arada

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

yapabilirsiniz nesnesi aracılığıyla döngü ve size bunu elde edebilirsiniz her ürün kimliği döngü içine product.id almak gerekiyorsa.

İlgili konular