Django:为模板中的每个用户组(多对多)关系列出用户详细信息和组



如何查询和显示Django模板中每个用户组(多对多(关系的用户信息及其组?

结果应该是:

| User username | User email     | Group name  |
| ------------- | -------------- | ----------- |
| user1         | user1@mail.com | groupA      |
| user1         | user1@mail.com | groupB      |
| user2         | user2@mail.com | groupA      |
| user2         | user2@mail.com | groupC      |
| user3         | user3@mail.com | groupA      |

我的问题类似于Vanilla Django Query,显示';扁平';用户/组(ManyToMany(列表,但希望在表中显示更多用户详细信息。

我天真地以为这样的事情会奏效,但没有。

{% for group in groups %}
{% for user in group.users.all %}
<tr>
<td>{{user.username}}</td>
<td>{{user.email}}</td>
<td>{{group.name}}</td>
</tr>
{% endfor %}
{% endfor %}

使用原始SQL查询解决了我的问题:https://stackoverflow.com/a/38780451/991505,但我正在用Django/Python的方式寻找更好的答案。

如果您使用Django的Group,您可以使用访问用户集

{% for group in groups %}
{% for user in group.user_set.all %}
…
{% endfor %}
{% endfor %}

您可以通过一个额外的查询预取所有相关用户来进一步提高效率,因此在您使用的视图中:

groups = Group.objects.prefetch_related('user_set')

最新更新