首页 > 解决方案 > django .values,用逗号连接孩子

问题描述

假设我有以下模型:

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、组名和逗号分隔的组成员列表。例如:

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

这可以使用对组的查询和 django 的 values 方法来完成吗?就像是:

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

哪里'members__first_last_joined_by_comma'显然是别的东西。

标签: djangojoinorm

解决方案


您可以在以下一行中使用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')

推荐阅读