Today I Learned/django

(장고) ORM tutorial #2. OneToOneField()

하나719 2023. 8. 21. 14:18
반응형

https://www.pythontutorial.net/django-tutorial/django-one-to-one/

 

Django One-To-One Relationship By Practical Examples

In this tutorial, you'll learn about Django one-to-one relationship and how it works under the hood.

www.pythontutorial.net

1:1 매칭되는 테이블 연결 만들어보기 

 

1. Contact 모델 생성 후 Employee 모델에 추가

Employee 한명당 하나씩 연결될 Contact 모델을 만들어서 추가한다.

  • OneToOneField(Model_Class_name, 조건 )
    • on_delete -> Employee데이터가 삭제 됐을 때, contact 데이터를 유지할 지 여부 
    • null = True -> contact 데이터가 없어도 employee 데이터 생성 할 수 있음 
## 모델 생성 
class Contact(models.Model):
    phone = models.CharField(max_length=50, unique=True)
    address = models.CharField(max_length=50)

    def __str__(self):
        return self.phone
class Employee(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    
    ## 연결 추가 ##
    contact = models.OneToOneField(Contact, on_delete=models.CASCADE, null=True)

    def __str__(self):
        return f'{self.first_name} {self.last_name}'

+ 마이그레이션 다시 해주기

 

2. shell 에서 데이터 확인

shell 다시 열어줘야함 

python manage.py shell_plus --print-sql

 

# contatct 연결해 줄 객체 선택
e = Employee.objects.get(id=3)
# contact 객체 생성
c = Contatct(phone ='01012345678' , address = 'seoul')
# 객체 연결 
e.contact = c 

# 연결된 객체 정보 확인하기

# contact return 값 
e.contact

# contact의 address 에 접근 
e.contact.address

# 반대로 c에서 employee에 접근 
c.employee

[결과 화면 참고]

반응형