Как объединить два набора запросов из разных моделей для создания нового набора запросов с дополнительными полями?
В настоящее время настройка Django/MySQL
Мне нужно объединить два запроса из разных моделей в один, но в отличие от CHAIN или UNION(), мне нужно, чтобы набор записей конечного запроса расширялся и включал данные, полученные из обоих запросов на основе общего ключа (sales_date), а также поля SUM. Пожалуйста, смотрите ниже для лучшего объяснения моего вопроса:
querysetA:
id | sales_date | store_sales |
---|---|---|
1 | 2020-01-15 | 2000.00 |
2 | 2020-01-16 | 1000.00 |
3 | 2020-01-17 | 3000.00 |
querysetB:
id | sales_date | online_sales |
---|---|---|
1 | 2020-01-15 | 1500.00 |
2 | 2020-01-16 | 800.00 |
3 | 2020-01-17 | 2800.00 |
Объединил кверисетC из кверисетовA и B (мой целевой результат кверисетC):
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 не дают мне того, что я хочу. Любая помощь или предложения будут высоко оценены.
Возможно, это невозможно сохранить как queryset. Но вы могли бы использовать list-comprehension для создания списка словарей, содержащих правильные данные (и, возможно, ссылки на исходные объекты.
).