2012-03-05 18 views
30

Basit bir soru ve bunun için bir cevap bulamıyorum. ManyToManyField üzerinde nasıl yineleyebilirim?

class Stuff(models.Model): 
    things = models.ManyToManyField(Thing) 

sonra farklı işlevde ben bunu yapmak istiyorum:

Ben ManyToMany alanına sahip bir modele sahip

myStuff = Stuff.objects.get(id=1) 
for t in myStuff.things.all: 
    # ... 

Ama bu beni veriyor:

TypeError: 'instancemethod' object is not iterable 

ManyToManyField üzerinde nasıl yineleyebilirim? ()all sonra ekleme

+0

"instancemethod nesnesi", bu bir yöntem (parantez gerektirir), yinelenen değil, size kapalı olmalıdır. – mpen

cevap

64

Dene: myStuff.things.all()

+13

Şablonda 'myStuff.things.all' (() öğesinin atlanması – Nathaniel

-2

gibi Abid A zaten cevap Eğer eksik parantezler()

for t in myStuff.things.all(): 
    print t.myStuffs.all() 
+3

niçin yineleniyorsunuz? ve örneğiniz kırıldı ... ne yazdırmaya çalışıyorsunuz (sonunda bir kolon var)? – mpen

+1

O zamana kadar burada yorum yazmak için bir iznim yoktu ve amacım, gösteremediğiniz tüm şeyleri bir for-loop yazdırma için gerçek bir çalışma örneğini göstermekti. Bir kolon var çünkü Python'da bir for-loop daima bire ihtiyaç duyar! –

+0

Düzenlediğiniz ekstra kolondan bahsediyordum. Ama yeterince adil ... Tam örnekleri takip etmeyi daha kolay buluyorum. – mpen

İlgili konular