Запрос модели Django с настраиваемыми полями выбора - PullRequest
1 голос
/ 22 июня 2009

Я использую модель разрешений на уровне строк, известную как django-granular-permissions (http://code.google.com/p/django-granular-permissions/). В модели разрешений просто есть еще два поля: тип содержимого и идентификатор объекта.

Я использовал следующий запрос:

 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 с этим отношением.

Как это сделать?

Ответы [ 2 ]

5 голосов
/ 22 июня 2009
.extra(select={'is_staff': "%s.name='staff'" % Permission._meta.db_table, 'is_student': "%s.name='student'" % Permission._meta.db_table, }) 
0 голосов
/ 22 июня 2009

Обычно вы бы использовали select_related () для подобных вещей, но, к сожалению, он не работает на обратных отношениях. Что вы можете сделать, это перевернуть запрос:

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