django .значения, объединяя детей запятыми - PullRequest
0 голосов
/ 11 февраля 2020

Допустим, у меня есть следующие модели:

class Group(models.Model):
    name = models.CharField(max_length=255)

class GroupMember(models.Model):
    first_name = models.CharField(max_length=64)
    last_name = models.CharField(max_length=64)
    group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name='members')

Я хотел бы получить список значений с идентификатором группы, именем группы и разделенным запятыми списком членов группы. Например:

[
    {'id': 1, 'name': 'Group Name', 'members': 'Jill Smith, Jack Peterson, Mike Frank'},
    {'id': 2, 'name': 'Another Group', 'members': 'Another Person, Jack Peterson'},
    ...
]

Можно ли это сделать с помощью запроса по группам и метода значений django? Что-то вроде:

group_data = Group.objects.all().values('id', 'name', F('members__first_last_joined_by_comma'))

, где 'members__first_last_joined_by_comma', очевидно, будет чем-то другим.

1 Ответ

1 голос
/ 11 февраля 2020

Вы можете использовать StringAgg и Concat выражение F () что-то в строке следующего

group_data = Group.objects.all().annotate(
    member_list=StringAgg(
        Concat(F('members__first_name', Value(' '), F('members__last_name'), output_field=CharField()),
        ", ")
).values('id', 'name', 'member_list')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...