django .values,用逗号连接孩子

Posted

技术标签:

【中文标题】django .values,用逗号连接孩子【英文标题】:django .values, joining children with commas 【发布时间】:2020-02-10 21:50:59 【问题描述】:

假设我有以下模型:

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' 显然是别的东西。

【问题讨论】:

你用什么数据库 我正在使用 postgres。 【参考方案1】:

您可以在以下一行中使用 StringAgg 和 Concat F() expression 一些东西

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')

【讨论】:

以上是关于django .values,用逗号连接孩子的主要内容,如果未能解决你的问题,请参考以下文章

用逗号分隔数组,但是当涉及到最后一个字符串时,删除逗号[重复]

用逗号连接变量 printf

SQLserver用逗号隔开的数据如何改为分行

用逗号分隔表的查询是交叉连接查询吗?

csharp 用逗号和“和”连接字符串列表

Ms Access SQL:连接用逗号分隔的一对多关系[重复]