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

2 投票
2 回答
3823 浏览
提问于 2025-04-15 12:25

我正在使用一种叫做django-granular-permissions的行级权限模型(http://code.google.com/p/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_staffis_student这两个布尔字段,而不想每次获取结果时都要重新查询。

Django的文档里提到了querysets的extra()方法,但我搞不清楚在这种关系下,应该怎么写普通的SQL选择查询。

该怎么做呢?

2 个回答

0

通常情况下,你会使用select_related()来处理这种情况,但不幸的是,它在反向关系上不起作用。你可以尝试把查询的方向调过来:

users = [permission.user for permission in Permission.objects.select_related('user').filter(...)]
5
.extra(select={'is_staff': "%s.name='staff'" % Permission._meta.db_table, 'is_student': "%s.name='student'" % Permission._meta.db_table, }) 

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答