我试图编写一个简单的Django查询来显示vanilla django.contrib.auth模型中所有组中的所有用户:
User.username | Group.name
------------- | -----------
user1 | groupA
user1 | groupB
user2 | groupA
user2 | groupC
user3 | groupA
我想以某种方式使用as' plain'这里的Django魔术是可能的,因为我们的目标是使这个报告适合现有的报告框架,该报告框架不容易支持自定义查询等等。
所以我想做的事情就是:
from django.contrib.auth import UserGroup
for x in UserGroup.objects.all():
print '%s\t%s' % (x.user.username, x.group.name)
...如果可以通过标准Django模型导入访问绑定用户和组对象的ManyToMany表。
答案 0 :(得分:1)
这将为您提供所有组中所有用户的列表:
from django.contrib.auth.models import Group
for group in Group.objects.all():
for user in group.user_set.all():
print '%s\t%s' % (user.username, group.name)
您还可以通过以下方式在一个查询中获取相同的信息:
user_groups = Group.objects.values_list('user__username', 'name')
这将返回一个像这样的元组列表:
[
('user1', 'GroupA'),
('user1', 'GroupB'),
('user2', 'GroupC'),
...
]
答案 1 :(得分:0)
为了它的价值,我还发现:
from django.contrib.auth.models import User, Group
qs = User.objects.raw("""select *, g.name as groupname
from auth_user_groups ug
inner join auth_user u on ug.user_id = u.id
inner join auth_group g on ug.group_id = g.id""")
for x in qs:
print '%s\t%s' % (x.username, x.groupname)
按预期工作,并返回一个充满工作的实际查询集'用户'对象引用。
它当然不能满足我原本的问题标准,即希望做到这一点"以某种方式使用as' plain'尽可能使用Django魔法"虽然如此,我已经接受了solarissmoke的回答。虽然我想在这里添加我的黑客作为后人的潜在答案。