我需要这样的东西来在django的单个查询中选择用户和组。
user = User.objects.select_related('groups').get(id=user_id)
我不想为此使用原始查询。
还有另一种方法可以做两个查询:
user = User.objects.get(id=user_id)
groups = user.groups
答案 0 :(得分:1)
编辑:除了原始sql或extra
之外,似乎无法在一个查询中执行此操作。
因此,如果您只想get
一个用户,那么您的第二个示例应该可行。
如果有很多用户:
您应该使用prefetch-related
,但需要两次查询。
另一方面,prefetch_related对每个关系进行单独查找,并在Python中进行“加入”。这允许它预取多对多和多对一对象,除了select_related支持的外键和一对一关系之外,这些对象无法使用select_related完成。它还支持预取GenericRelation和GenericForeignKey。
...
在开始评估QuerySet并执行主查询之后,将执行prefetch_related()中的其他查询。
因此,如果您要预取groups
,无论您使用all
还是get
,它都会执行两次查询。
答案 1 :(得分:0)
您可以在视图中使用相关的预取,然后将其传递给模板
<table id="example-datatable" class="table draggable table-striped table-bordered table-vcenter">
<thead>
<tr>
<th>Account Name</th>
<th>Meeting Date</th>
<th>Start Time</th>
<th>No Of Hours</th>
<th>Project</th>
<th>Status</th>
<th>Created By</th>
<th>Created On</th>
<th>Modified By</th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
<!-- Define the Template TR to Clone for rest of the Rows -->
<tr style="display:none">
<td>accountName</td>
<td>meetingDate</td>
<td>startTime</td>
<td>no_of_hours</td>
<td>projectName</td>
<td>IsActive</td>
<td>employeeDisplayName</td>
<td>createdDate</td>
<td>employeeDisplayName</td>
<td class="text-center">
<!--Buttons Binded here with primarykey ID-->
</td>
</tr>
</tbody>
</table>
答案 2 :(得分:0)
您应该从组模型中选择,因为这种关系是多对多的。 我没有尝试回答,但是也许可以解决;
group_list_with_user = Group.objects.filter(user = USERID).all()
之后,您可以访问分配给用户和访问用户的所有组;
group_list_with_user[0].name # group name
group_list_with_user[0].user.first_name # user's first name