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

时间:2009-06-22 09:12:19

标签: python django django-models

我正在使用称为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_staffis_student布尔字段,而不是每次获取结果时都查询。

Django文档显示了查询集的extra()方法,但我无法弄清楚我应该用这种关系为纯SQL选择查询编写什么。

怎么做?

2 个答案:

答案 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(...)]