如何在Django中使用for循环执行查询集

时间:2016-01-16 18:31:33

标签: django django-models django-queryset

我使用查询集从城市获取用户列表:

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

所以我得到类似的东西:

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

这很好,但我需要做另一个查询集来获取他们的设备

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

我只获得了上一个用户(usuario)中的最后一个设备:

[GCMDevice:samsung]

任何人都知道如何从该用户那里获得所有设备?

1 个答案:

答案 0 :(得分:3)

还有更多选择。 将其放入字典中,并将用户的ID作为键:

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

但这对DB有点要求,因为它做了太多查询。因此,您可以通过单个查询获取所有DCMDevice条记录:

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)