PoYo Rivera
PoYo Rivera

Reputation: 163

How to perform a queryset in Django with a loop for in

i use a queryset to obtain a user list from a city:

usuarios = Usuario.objects.filter(municipio=muni).exclude(user_id = ide)

so i get something like:

[Usuario: user1, Usuario: user2, Usuario: user3]

that is good but i need to do another queryset for obtain their devices

for usuario in usuarios:
    devices = GCMDevice.objects.filter(user_id=usuario.user.id)

and i get only the last device from the last user(usuario):

[GCMDevice: samsung]

anybody know how can i obtain all devices from that users?

Upvotes: 4

Views: 22305

Answers (1)

yedpodtrzitko
yedpodtrzitko

Reputation: 9359

There is more options. Put it into a dictionary with the user's id as a key:

for usuario in usuarios:
    devices[usario.user.id] = GCMDevice.objects.filter(user_id=usuario.user.id)

but this is a bit demanding for the DB, as it is doing too many queries. So you can obtain all the DCMDevice records via a single query:

user_ids = Usuario.objects.filter(municipio=muni).exclude(user_id=ide).values_list('user_id', flat=True)
devices = GCMDevice.objects.filter(user_id__in=user_ids)

Upvotes: 7

Related Questions