【发布时间】:2021-12-23 00:46:52
【问题描述】:
目前在 Django/MySQL 设置中
我需要将来自不同模型的两个查询合并为一个,但与 CHAIN 或 UNION() 不同的是,我需要扩展最终查询集的记录集以包含从基于公共键 (sales_date) 的两个查询中检索到的数据以及总和字段。请参阅下文以更好地解释我的问题:
查询集A:
| id | sales_date | store_sales |
|---|---|---|
| 1 | 2020-01-15 | 2000.00 |
| 2 | 2020-01-16 | 1000.00 |
| 3 | 2020-01-17 | 3000.00 |
查询集B:
| id | sales_date | online_sales |
|---|---|---|
| 1 | 2020-01-15 | 1500.00 |
| 2 | 2020-01-16 | 800.00 |
| 3 | 2020-01-17 | 2800.00 |
从querysetA和B加入querysetC(我的目标结果querysetC):
| id | sales_date | store_sales | online_sales | combine_sales |
|---|---|---|---|---|
| 1 | 2020-01-15 | 2000.00 | 1500.00 | 3500.00 |
| 2 | 2020-01-16 | 1000.00 | 800.00 | 1800.00 |
| 3 | 2020-01-17 | 3000.00 | 2800.00 | 5800.00 |
我的两个查询集的代码如下(既工作又给我正确的结果):
querysetA = store_shop.objects.filter(
sales_date__range=(fromdate, todate)) \
.values('sales_date') \
.annotate(store_sales=Sum('sales_income')) \
.order_by('sales_date')
querysetB = online_shop.objects.filter(
sales_date__range=(fromdate, todate)) \
.values('sales_date') \
.annotate(online_sales=Sum('sales_income')) \
.order_by('sales_date')
union() 和 itertools.chain 都没有给我我想要的。任何帮助或建议将不胜感激。
【问题讨论】:
-
有什么理由它必须是一个查询集而不是在 Python 中处理?
-
只是我已经在努力传递 dict 以从查询集生成图表,所以想知道是否可以这样做,因为我对任何相关结果的搜索都是空的。不过感谢您的提示。
标签: python mysql django join django-queryset