ManyRelatedManager ऑब्जेक्ट पुनरावृत्त नहीं है


94

ऐसा करने की कोशिश कर रहा है:

अपडेट किया गया:

wishList = WishList.objects.get(pk=20)
matches = [val for val in Store.attribute_answers.all() if val in wishList.attribute_answers]

और इसे प्राप्त करें ...

'ManyRelatedManager' object is not iterable

दोनों क्षेत्र बहुत से हैं इसलिए यह कैसे किया जा सकता है?

जवाबों:


106

प्रयत्न

matches = [val for val in Store.attribute_answers.all() if val in WishList.attribute_answers.all()]

कोष्ठक के अंत में सूचना दें WishList.attribute_answers.all()। कोष्ठक जोड़ना allसमारोह को वापस लाने के लिए आह्वान करता है।

यदि आप कोष्ठक को शामिल कर रहे हैं, तो आप कह रहे हैं "मुझे स्टोर के जवाब में सभी मान दें जब तक कि मूल्य इच्छा सूची में भी है"। कोष्ठक के बिना आप स्टोर के उन सभी मूल्यों से पूछ रहे हैं allजो फ़ंक्शन में भी हैं , जो अर्थहीन है। सभी फ़ंक्शन एक चलने योग्य नहीं है (यह एक ऐसा फ़ंक्शन है जो एक पुनरावृत्ति देता है)



28

यदि आप इसे किसी टेम्पलेट में कर रहे हैं:

{% for room in study.room_choice.all %}
  {{ room }}
  {% empty %}
  empty list!
{% endfor %}

अपडेट करें

यदि आपके पास एक थ्रू तालिका है, तो आप उस तालिका में (जैसे कि यहाँ विस्तृत ) तत्वों को एक्सेस कर सकते हैं (ध्यान दें, आप थ्रू नाम का उपयोग लोअरकेस में, प्रत्यय _सेट में करते हैं):

{% for roominfo in participant.roomchoicethru_set.all %}
  {{ roominfo.room}} {{ roominfo.telnumber}}
{% endfor %}

1
धन्यवाद यह एक बहुत ही साफ तरीका है
मोल्टेनफिंस

धन्यवाद, यह वास्तव में उपयोगी था
MGLondon

25

टी एल; डॉ

हर कोई जो टीएल के रूप में प्रश्नों में रीडिंग कोड पाता है , डॉ

के बजाय query_set.many_to_many

आपको उपयोग करना चाहिए query_set.many_to_many.all()


1
यह स्वीकार किया गया उत्तर होना चाहिए, कोई भी सरल नहीं मिल सकता
मलिक बैगवाला

-1

यहाँ प्रोफ़ाइल मॉडल में busines_type विदेशी_की है

pro = Profile.object.filter(user=myuser).first()
business_type = pro.business_type.all()
if business_type:
    b_type = ''
    for b in business_type:
        b_type += str(b.type)+' '
        a = b_type

-1

जब भी यह समस्या आती है मैं इस सवाल को टालता रहता हूं। विशेष रूप से जब वास्तव में एक फ़ंक्शन में एक manytomany पर पुनरावृति करने की कोशिश कर रहा है।

एक टेम्पलेट के रूप में आप यह कर सकते हैं:

array = many_to_many.all()
for x in many_to_many:
  function here
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.