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,用逗号连接孩子的主要内容,如果未能解决你的问题,请参考以下文章