Django 多对多查询字典表示



我有这个查询

campaign_query = Campaign.objects.filter(id__in=campaign_ids).select_related('campaign_manager__name').prefetch_related('products').values(
'id', 'name', 'campaign_manager_id', 'campaign_manager__name', 'products'
)

这应该返回我的竞选对象的字典表示。

问题在于,"产品"是一种多对多关系,只返回第一个产品,而不是所有产品的列表。

返回示例:

<QuerySet [{'id': 19, 'name': 'Gby id', 'campaign_manager_id': 3, 'campaign_manager__name': '', 'products': 34}]>

我想要什么

<QuerySet [{'id': 19, 'name': 'Gby id', 'campaign_manager_id': 3, 'campaign_manager__name': '', 'products': [34,35,36]}]>

如果你对数据库使用 Postgres,那么会有 ArrayAgg

from django.contrib.postgres.aggregates.general import ArrayAgg
campaign_query = Campaign.objects.filter(
id__in=campaign_ids
).select_related(
'campaign_manager__name'
).prefetch_related(
'products'
).values(
'id', 'name', 'campaign_manager_id', 'campaign_manager__name',
products=ArrayAgg('products__id')
)

我还没有测试它,但希望它能工作。

最新更新