Левое присоединение в Django
У меня есть следующие модели:
class Patient(models.Model):
patient_first_name = models.CharField(max_length=50)
patient_last_name = models.CharField(max_length=50)
patient_name = models.CharField(max_length=100)
patient_email = models.EmailField(max_length=100)
gender = models.CharField(max_length=50)
class PatientMedicalRecord(models.Model):
patient = models.ForeignKey(PatientTable)
mrn = models.CharField(max_length=50, unique=True)
patient_height = models.IntegerField(blank=True, null=True)
patient_weight = models.IntegerField(blank=True, null=True)
age_risk = models.BooleanField(default=False)
Я хочу сделать запрос к таблице patient для получения всех пациентов. Также мне нужно значение столбца MRN из таблицы PatientMedicalRecord, которая содержит запись для конкретного пациента, если она существует. Как я могу сделать это с помощью djnago ORM?
Вы можете получить связанные объекты, используя object_set. В вашем примере это можно сделать следующим образом:
patient = Patient.objects.get(pk=1) # You can use any attribute to get the Patient object
patient_medical_records = patient.patientmedicalrecord_set.all()
patient_mrns = []
for record in patient_medical_records:
patient_mrns.append(record.mrn)
Вы также можете определить свойство related_name в вашей модели для отношения, с помощью которого будет выполняться запрос отношений. Например:
class PatientMedicalRecord(models.Model):
patient = models.ForeignKey(Patient, on_delete=models.CASCADE, related_name='patient_records')
Тогда вы запросите его следующим образом:
patient = Patient.objects.get(pk=1)
patient_medical_records = patient.patient_records.all()