데이터 분석 기술 블로그

DB에 대하여(12)_중개 모델 (feat. Django) 본문

DB

DB에 대하여(12)_중개 모델 (feat. Django)

데이터분석가 이채은 2024. 4. 29. 21:34

1. 예약 모델 생성

환자 모델의 외래 키를 삭제하고 별도의 예약 모델을 새로 생성합니다.

예약 모델은 의사와 환자에 각각 N:1 관계를 갖습니다.

# hospitals/models.py

# 외래 키 삭제
class Patient(models.Model):
    name = models.TextField()
    
    def __str__(self):
        return f'{self.pk}번 환자 {self.name}'

# 중개모델 작성
class Reservation(models.Model):
    doctor = models.ForeignKey(Doctor, on_delete=models.CASCADE)
    patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
    
    def __str__(self):
        return f'{self.doctor_id}번 의사의 {self.patient_id}번 환자'


2. 예약 데이터 생성

데이터베이스 초기화 후 Migration 진행 및 shell_plus 실행합니다.

의사와 환자 생성 후 예약을 만듭니다.

doctor1 1= Doctor.objects.create(name='allie')
patient1 = Patient.objects.create(name='carol')

Reservation.objects.create(doctor=doctor1, patient=patient1)


3. 예약 정보 조회

의사와 환자가 예약 모델을 통해 각각 본인의 진료 내역을 확인합니다.

# 의사 -> 예약 정보 찾기
doctor1.reservation_set.all()
<QuerySet [<Reservation: 1번 의사의 1번 환자>]>

# 환자 -> 예약 정보 찾기
patient1.reservation_set.all()
<QuerySet [<Reservation: 1번 의사의 1번 환자>]>

4. 추가 예약 생성

1번 의사에게 새로운 환자 예약을 생성합니다.

patient2 = Patient.objects.create(name='duke')

Reservation.obejcts.create(doctor=doctor1, patient=patient2)


5. 예약 정보 조회

1번 의사의 예약 정보를 조회합니다.

# 의사 -> 환자 목록
doctor1.reservation_set.all()
<QuerySet [<Reservation: 1번 의사의 1번 환자>, <Reservation: 1번 의사의 2번 환자>]>