Как получить отдельные записи на основе определенных полей в django orm?
def get_queryset(self):
# current_date = datetime(2024, 9, 2, 12, 56, 54, 324893).today()
current_date = datetime.today()
# get the booking data from the current date --------- requested_datetime is when the patient has scheduled the booking for
booking_data = PatientBooking.objects.annotate(
admission_datetime=F('requested_admission_datetime'),
delivery_datetime=F('estimated_due_date'),
fully_dilation_datetime=ExpressionWrapper(
F('estimated_due_date') - timedelta(days=(1)),
output_field=DateTimeField()
),
source=Value('booking', output_field=CharField())
).filter(status="ACCEPTED",
admission_datetime__date=current_date
)
# get the patient data from the current date ---- based on when the patient record is created_at
patient_data = PatientDetails.objects.annotate(
admission_datetime=F('created_at'),
delivery_datetime=F('estimated_due_date'),
fully_dilation_datetime=F('patient_fully_dilated'),
source=Value('patient', output_field=CharField())
).filter(status="ACTIVE",
admission_datetime__date=current_date
)
# combine the record in one queryset using union on the required fields only
combined_queryset = booking_data.values('first_name', 'last_name', 'delivery_type', 'date_of_birth',
'admission_datetime', 'delivery_datetime', 'fully_dilation_datetime', 'source'
).union(
patient_data.values('first_name', 'last_name', 'delivery_type', 'date_of_birth',
'admission_datetime', 'delivery_datetime', 'fully_dilation_datetime', 'source'
)
).order_by('first_name', 'last_name', 'date_of_birth')
# if records in both the model matches---- then consider it as same patient and consider the record where the source=patient
combined_queryset = combined_queryset.distinct(
'first_name', 'last_name', 'date_of_birth'
)
return combined_queryset
Вот мой набор запросов. У меня есть две модели PatientDetails и PatientBooking, обе модели имеют разное количество полей и имен. Я хочу получить один набор запросов с определенными полями из обеих таблиц. Поэтому я сначала аннотирую имя поля, а затем выполняю объединение с ним. Чтобы получить один набор запросов с именами полей ('first_name', 'last_name', 'delivery_type', 'date_of_birth', 'admission_datetime', 'delivery_datetime', 'fully_dilation_datetime', 'source'). До сих пор все работает нормально, и я получаю желаемый результат.
Но после получения результатов из обеих моделей в одном наборе запросов. Теперь я хочу получить отличительные записи на основе ('first_name', 'last_name','date_of_birth'). Я попробовал
combined_queryset = combined_queryset.distinct(
'first_name', 'last_name', 'date_of_birth'
)
но он не работает. Что я делаю не так, кто-нибудь может мне сказать.