我正在使用称为django-granular-permissions(http://code.google.com/p/django-granular-permissions/)的行级权限模型。权限模型只有两个字段,即content-type和object 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文档显示了查询集的extra()方法,但我无法弄清楚我应该用这种关系为纯SQL选择查询编写什么。
怎么做?
答案 0 :(得分:5)
.extra(select={'is_staff': "%s.name='staff'" % Permission._meta.db_table, 'is_student': "%s.name='student'" % Permission._meta.db_table, })
答案 1 :(得分:0)
通常你会使用select_related()来做这样的事情,但遗憾的是它不适用于反向关系。你可以做的是打开查询:
users = [permission.user for permission in Permission.objects.select_related('user').filter(...)]