【问题标题】:How to join two querysets from different model to create a new queryset with additional fields?如何连接来自不同模型的两个查询集以创建具有附加字段的新查询集?
【发布时间】: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


【解决方案1】:

也许无法将其保留为查询集。但是您可以使用 list-comprehension 创建一个包含正确数据的字典列表(可能还有对原始对象的引用。

【讨论】:

  • 是的,我也这么认为,谢谢你的提示!
猜你喜欢
  • 1970-01-01
  • 2018-06-27
  • 2012-12-07
  • 1970-01-01
  • 2023-02-02
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
相关资源
最近更新 更多