Как объединить значения из 2 наборов запросов
У меня есть два набора запросов, оба имеют общее поле "месяц", я хочу объединить оба набора запросов, используя поле "месяц"
six_months_ago = date.today() + relativedelta(months=-6)
###### Geting number of New Patient registration by month (for last six month)
patient_per_month = patientprofile.objects.filter(pat_Registration_Date__gte=six_months_ago)\
.annotate(
month=Trunc('pat_Registration_Date', 'month')
) \
.order_by('month') \
.values('month') \
.annotate(patient=Count('month'))
print(patient_per_month)
###### Geting number of visit by month (for last six month)
visits_per_month = visits.objects.filter(visit_date__gte=six_months_ago)\
.annotate(
month=Trunc('visit_date', 'month')
) \
.order_by('month') \
.values('month') \
.annotate(visits=Count('month'))
print(visits_per_month)
Ниже печатная реклама:
<QuerySet [{'month': datetime.date(2022, 2, 1), 'patient': 1}, {'month': datetime.date(2022, 3, 1), 'patient': 1}, {'month': datetime.date(2022, 4, 1), 'patient': 1}, {'month': datetime.date(2022, 5, 1), 'patient': 2}, {'month': datetime.date(2022, 6, 1), 'patient': 2}, {'month': datetime.date(2022, 7, 1), 'patient': 18}]>
<QuerySet [{'month': datetime.date(2022, 5, 1), 'visits': 6}, {'month': datetime.date(2022, 6, 1), 'visits': 7}, {'month': datetime.date(2022, 7, 1), 'visits': 12}]>
Я хочу объединить оба этих запроса в один по полю 'month', как показано ниже.
<QuerySet [{'month': datetime.date(2022, 2, 1), 'patient': 1, 'visits': 0}, {'month': datetime.date(2022, 3, 1), 'patient': 1, 'visits': 0}, {'month': datetime.date(2022, 4, 1), 'patient': 1, 'visits': 0}, {'month': datetime.date(2022, 5, 1), 'patient': 2, 'visits': 6}, {'month': datetime.date(2022, 6, 1), 'patient': 2, 'visits': 7}, {'month': datetime.date(2022, 7, 1), 'patient': 18'visits': 12}]>
Попробуйте следующий метод
from itertools import chain
result = list(chain(patient_per_month, visits_per_month))