Левое присоединение в 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()
Вернуться на верх