如何在django中选择单个查询中的用户和组?
在django中,在单个查询中选择用户和组时,我需要类似的东西如何在django中选择单个查询中的用户和组?,django,django-orm,Django,Django Orm,在django中,在单个查询中选择用户和组时,我需要类似的东西 user = User.objects.select_related('groups').get(id=user_id) 我不想对此使用原始查询 还有另一种方法可以进行两个查询: user = User.objects.get(id=user_id) groups = user.groups 编辑:似乎除了原始sql或额外的之外,在一个查询中没有其他方法可以做到这一点 因此,如果您只想获得一个用户,那么您的第二个示例应该可以。
user = User.objects.select_related('groups').get(id=user_id)
我不想对此使用原始查询
还有另一种方法可以进行两个查询:
user = User.objects.get(id=user_id)
groups = user.groups
编辑:似乎除了原始sql或
额外的
之外,在一个查询中没有其他方法可以做到这一点
因此,如果您只想获得一个用户,那么您的第二个示例应该可以。
如果有许多用户:
您应该在两个查询中使用 另一方面,prefetch_-related对每个关系执行单独的查找,并在Python中执行“连接”。这允许它预取多对多和多对一对象,这是使用select_-related无法完成的,此外,select_-related还支持外键和一对一关系。它还支持预取GenericRelation和GenericForeignKey prefetch_related()中的附加查询是在开始计算查询集并执行主查询之后执行的
因此,如果您想预取
组
,它将执行两个查询,无论您是使用all
还是get
,您可以在视图中使用prefetch related,然后将其传递给模板
def view(request):
user = User.objects.all().select_related(
).prefetch_related(
'groups',
).get(pk=request.user.pk)
return render(request, 'app/template.html', {
'user': user,
})
您应该从组模型中选择,因为关系是多对多的。 我还没有尝试过我的答案,但也许它会奏效
group\u list\u带有用户=group.objects.filter(用户=USERID.all()
此后,您可以访问分配给用户的所有组,例如访问用户
group_list_with_user[0].name # group name
group_list_with_user[0].user.first_name # user's first name
你的第一个例子有什么问题?你只需要
user.groups.all()
你看过prefetch\u related
了吗?它应该用于在一个查询中提取多对多关系。它可能执行两个查询,但是否比运行OP首先尝试的两行要慢?@Bobort它们应该是相同的,因为它们基本上做相同的事情。