Django Models 2 ForeignKey

관계 (Relationships)

관계형 데이터베이스의 힘은 테이블을 서로 연관시키는데 있다. 장고는 다 대일, 다 대다, 일대일 데이터 베이스 관계의 세 가지 가장 일반 적인 유형을 정의 할수 있는 방법을 제공 한다.

속도는 키-벨류형 데이터베이스가 빠르지만 서로관의 관계를 표현하기에 적절하지 못하며 속도에 최적화 되어 있다. 반면에 관계형 데이터 베이스는 저장 용량을 아끼는데 최적화 되어 있다.

다 대일 (Many-to-one relationships)

다 대일 관계를 표현하려면 장고 모델의 django.db.models.ForeignKey를 사용 하면 된다.

ForeignKey는 위치 인수가 필요하다. 모델이 관련된 클래스 이다. 만약 자동차와 제조회사가 있는 경우 제조업체가 여러 자동차를 생산하지만 각 자동차에는 하나의 제조 업체가 있는 경우를 만들어 보면

from django.db import models


class Manufacturer(models.Model):
    name = models.CharField('제조사 명', max_length=100)

    def __str__(self):
        return self.name


class Car(models.Model):
    manufacturer = models.ForeignKey(
        Manufacturer,
        on_delete=models.CASCADE,
        verbose_name='제조사'
    )
    name = models.CharField('모델명', max_length=60)

    def __str__(self):
        return f'{self.manufacturer.name} {self.name}'
samsung = Manufacturer.objects.create(name='아우디')
sm3 = Car.objects.create(manufacturer=samsung, name='sm3')

# 자동차 에서 제조사를 가져 올 경우
print(sm3.manufacrurer.name) # 아우디
# 제조사에서 자동차를 가져 올 경우
print(samsung.car_set.first().name) # sm3

Comments