如何在django中单个查询中选择用户和组?

时间:2014-03-05 14:42:56

标签: django django-orm

我需要这样的东西来在django的单个查询中选择用户和组。

user = User.objects.select_related('groups').get(id=user_id)

我不想为此使用原始查询。

还有另一种方法可以做两个查询:

user = User.objects.get(id=user_id)
groups = user.groups

3 个答案:

答案 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