Python 带有自定义选择字段的Django模型查询

Python 带有自定义选择字段的Django模型查询,python,django,django-models,Python,Django,Django Models,我使用的是行级权限模型django granular permissions()。权限模型仅仅还有两个字段,即内容类型和对象id 我使用了以下查询: User.objects.filter(Q(row_permission_set__name='staff') | \ Q(row_permission_set__name='student'), \ row_permission_set__object_id=labsite.id) 我想在结果集中添加is_staff和is

我使用的是行级权限模型django granular permissions()。权限模型仅仅还有两个字段,即内容类型和对象id

我使用了以下查询:

 User.objects.filter(Q(row_permission_set__name='staff') | \
     Q(row_permission_set__name='student'), \
     row_permission_set__object_id=labsite.id)
我想在结果集中添加
is_staff
is_student
布尔字段,而不必每次获取结果时都进行查询

Django文档显示了QuerySet的额外()方法,但我不知道应该为具有此关系的普通SQL选择查询编写什么


如何做到这一点?

通常,您会使用select_related()处理类似的事情,但不幸的是,它不适用于反向关系。您可以做的是扭转查询:

users = [permission.user for permission in Permission.objects.select_related('user').filter(...)]

在每个查询中包含此限定有什么问题?您有性能问题吗?没有,上面的查询完全没有问题。但我想在结果集对象中添加
是\u staff
是\u boolean
额外字段。在您的查询中,我如何确定每个用户是否具有某些权限?(特别是在模板方便的形式下)由于权限对象上的筛选(您只需筛选出所需的权限),列表中的所有用户都将拥有所需的权限。如果您只需要显示具有所需权限的用户,那么这比.extra()更简单。如果您需要列出所有用户,然后为那些拥有某些权限的用户执行特定的操作,那么extra()就是一种选择。我错误地否决了这一点。时间限制已经过了,除非答案被编辑,否则我可以进行任何更改。如果你任意改变,我将改正我的错误,投赞成票。干杯
.extra(select={'is_staff': "%s.name='staff'" % Permission._meta.db_table, 'is_student': "%s.name='student'" % Permission._meta.db_table, })