我有这个查询
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')
)
我还没有测试它,但希望它能工作。