Аннотирование объектов пользователя с отфильтрованными группами - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь сериализовать пользовательские данные в Django Rest Framework и хочу вернуть только выбранные группы, членом которых является пользователь.На основании, если имя группы оканчивается на _certific.

Я посмотрел на F-выражения и даже на объекты Q, но не могу найти простой способ сделать это или, если это вообще возможно.

Примечание.Я использую встроенные модели User и Group.

Мой ожидаемый результат -

{
    "User": {
        ...
        "Groups": ['role1_certified', 'role2_certified' ...] 
    }
}

Groups должен содержать только группы, оканчивающиеся на _certified

1 Ответ

0 голосов
/ 10 мая 2019

Основываясь на комментарии Яхора, я пришел к следующему решению:

from django.contrib.postgres.aggregates import ArrayAgg
from django.db.models import Q

user = User.objects.annotate(certified_groups=ArrayAgg(
    'groups__name', filter=Q(groups__name__endswith='_certified')))
...