ManyRelatedManager 개체는 반복 할 수 없습니다.


96

이렇게하려고 :

업데이트 :

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

두 필드가 모두 많으므로 어떻게 할 수 있습니까?

답변:


108

시험

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

끝에 괄호가 WishList.attribute_answers.all()있습니다. 괄호를 추가하면 all이터 러블을 반환하는 함수가 호출 됩니다.

괄호를 포함하면 "그 값이 위시리스트 답변에도있는 한 상점 답변의 모든 값을주세요"라고 말하는 것입니다. 괄호가 없으면 all함수 에도있는 상점의 답변에서 모든 값을 요청 하는 것입니다. 이는 의미가 없습니다. all 함수는 이터 러블이 아닙니다 (이터 러블을 반환하는 함수입니다).


53

당신이 뭔가를 찾고있는 것 같습니다 Store.attribute_answers.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
감사합니다 이것은 정말 깨끗한 접근 방식입니다
MoltenMuffins

감사합니다, 이건 정말 도움이되었다
MGLondon

28

TL; DR

질문에서 읽기 코드를 TL; DR 로 찾는 모든 사람

대신에 query_set.many_to_many

당신은 사용해야합니다 query_set.many_to_many.all()


1
이것은 받아 들여진 대답이어야했고, 더 간단하게는 얻을 수 없습니다
malik bagwala

-1

여기서 busines_type은 프로필 모델의 foreign_key입니다.

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

이 문제가 발생할 때마다이 질문을 계속합니다. 특히 함수의 많은 부분을 실제로 반복하려고 할 때.

템플릿으로 다음을 수행 할 수 있습니다.

array = many_to_many.all()
for x in many_to_many:
  function here
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.