У меня есть 3 модели:
#Appointment
class Appointment(models.Model):
doctor = models.ForeignKey(
Doctor,
on_delete=models.CASCADE,
related_name='doctor_appointment')
patient = models.ForeignKey(
Patient,
on_delete=models.CASCADE,
related_name='patient_appointment')
scheduled = models.DateTimeField(auto_now_add=True)
# Doctor
class Doctor(models.Model):
user_id = models.TextField(unique=True)
first_name = models.CharField(max_length=100, blank=False)
last_name = models.CharField(max_length=100, blank=False)
# Patients
class Patient(models.Model):
user_id = models.TextField(unique=True)
first_name = models.CharField(max_length=100, blank=False)
last_name = models.CharField(max_length=100, blank=False)
И я хочу выполнить следующий запрос, используя Django ORM
:
SELECT
d.first_name,
d.last_name,
d.specialty,
d.address,
a.scheduled
FROM appointment as a
LEFT JOIN patient as p ON p.id=a.patient_id
LEFT JOIN doctor as d ON d.id = a.doctor_id
WHERE p.user_id = '12345';
Я пришел с этим утверждением:
ret = Appointment.objects.filter(patient__user_id='12345').values_list('doctor__first_name', 'doctor__last_name', 'scheduled')
но после изучения его необработанного запроса (ret.query
) я могу видеть, что это переводится в набор INNER JOINS
.
Есть ли способ получить запрос, который я хочу?