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

标签 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:三星]

有人知道我如何从该用户那里获取所有设备吗?

最佳答案

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

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

但这对数据库来说有点苛刻,因为它做了太多的查询。因此,您可以通过单个查询获取所有 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)

关于django - 如何在 Django 中使用 for in 循环执行查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34830595/

相关文章:

python - Django 密码重置

python - 通过模型的属性(而不是字段)对 Django QuerySet 进行排序

python - 对于这种(虚拟表的)API,我应该规范化我的模型还是使用大表?

python - django 查询集中的意外行为

python - Django JSONField 过滤查询集

python - Apache Web 服务器上的 Django 'dict' 对象没有属性 'render_context'

python - Django 首选/流行的 Vagrant 盒子是什么?

python - django模型字段检查实例

python - 在 Django 中使用 uuid 查询对象