Próbować
matches = [val for val in Store.attribute_answers.all() if val in WishList.attribute_answers.all()]
Zwróć uwagę na nawias na końcu WishList.attribute_answers.all()
. Dodanie nawiasu wywołuje all
funkcję zwracającą iterowalną.
Jeśli dodasz nawias, mówisz „podaj mi wszystkie wartości w sklepach odpowiedzi, o ile ta wartość jest również na liście życzeń odpowiedzi”. Bez nawiasów pytasz o wszystkie wartości z odpowiedzi sklepu, które również znajdują się w all
funkcji, która jest bez znaczenia. Funkcja all nie jest iterowalna (jest to funkcja, która zwraca iterowalną)
TL; DR
Dla każdego, kto w pytaniach odnajduje kod do czytania jako TL; DR
Zamiast
query_set.many_to_many
powinieneś użyć
query_set.many_to_many.all()
źródło
Tutaj busines_type to Foreign_key w modelu profilu
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
źródło
Ciągle zadaję to pytanie, gdy pojawia się ten problem. Szczególnie, gdy próbujemy dokonać iteracji po wielu tomach w funkcji.
Jako szablon możesz:
array = many_to_many.all() for x in many_to_many: function here
źródło