Как объединить значения из 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))
Вернуться на верх