2010-08-25 8 views
1

Salut Je cherche à remplir une liste de membres, d'après l'origine de leur club.Django - redouté 'itération sur non-séquence'

Ceci est mon code:

members = [] 
if userprofile.countries.count() > 0: 
    for c in userprofile.countries.all(): 
     clubs = Club.objects.filter(location__country = c) 
     for club in clubs: 
      members_list = Member.objects.get_members(club) 
      for m in members_list: 
       members.append(m) 

Cependant, lors de l'évaluation for m in members_list: il déclenche une 'itération sur non-séquence'

Je ne suis pas tout à fait sûr pourquoi? Quelqu'un peut-il me donner des idées ?!

EDIT:

résolu en utilisant les éléments suivants:

members = [] 
if userprofile.countries.count() > 0: 
      members_list = member.objects.filter(memberstoentities__club__location__country__in = userprofile.countries.all()) 
      for m in members_list: 
       members.append(m) 
+0

Pouvez-vous poster la source du modèle 'Member'? –

+1

Qu'est-ce que 'Member.objects.get_members' est censé renvoyer? Je devine qu'il renvoie une liste, mais évidemment, ce n'est pas ('None'?) ... – delnan

+1

Que fait' Member.objects.get_members (club) 'qui ne pourrait pas être servi par' club.member_set .all() '? –

Répondre

2

ne peux pas commenter à moins regarder modèle membre. Mais

  1. On ne peut pas utiliser .filter à la navigation en arrière, au lieu de get_members
  2. Avons-nous besoin de ces nombreuses boucles, et l'accès db à l'intérieur de la boucle? ex:

clubs = Club.objects.filter (location__country__in = list_of_user_countries)

Si votre liste finale est la liste des membres, vous pouvez le faire comme je l'ai mentionné ci-dessus (au moins de manière optimisée)

+0

Merci! En combinant les requêtes et en utilisant votre méthode, j'ai réussi à le résoudre! –