Home > PYTHON > Framework > Django > Django relations

Django relations
python framework Django

How to use relations in Django #


relation은 모델을 더욱 유연하고 연결성이 좋게 만들 수 있습니다. 잘못 설정할 경우 오히려 복잡해지기도 하며, 아래의 방식을 참조하여 정확하게 설정해야 합니다.

Django에서는 다음 방식의 relation key가 있습니다.

  • Foriegn Key(many to one)
    일반적으로 가장 흔하게 사용되는 관계입니다. 다중값을 가져와야하여 query로 값이 나오게 됩니다.
  • one to one
    1대1로 매칭이 되는 상황에서 사용이 가능하며 object를 바로 가져오는 방식이 가능합니다.
  • many to many
    관계가 종속적이라기 보다 상호관계를 가지게 되는 형태로 가장 일반적이지 못한 형태입니다.

Field of model #


model의 column들을 정의 하는 field는 다음과 같이 사용할 수 있습니다.

Field Option #


Field의 옵션은 다음과 같으며 모든 Field가 모든 옵션을 사용할 수는 없습니다.

Field 옵션 설명
to 필드의 기본값을 설정합니다.
related_name 추상 모델에서 관계를 정의할 때 사용될 이름을 의미합니다.
on_delete 개체가 제거될 때의 동작을 설정합니다.
db_column 데이터베이스의 컬럼의 이름을 설정합니다.
limite_choices_to json형식으로 데이터베이스의 컬럼의 옵션을 추가해 filter를 적용합니다.

다음은 on_delete일때 외래키의 작동요건을 나타냅니다.

on_delete 의미
models.CASCADE 외래키를 포함하는 행도 함께 삭제
models.PROTECT 해당 요소가 함께 삭제되지 않도록 오류 발생 (ProtectedError)
models.SET_NULL 외래키 값을 NULL 값으로 변경 (null=True일 때 사용 가능)
models.SET(func) 외래키 값을 func 행동 수행 (func는 함수나 메서드 등을 의미)
models.DO_NOTHING 아무 행동을 하지 않음

외래키는 정규참조와 역참조로 이루어지는데 일반적인 방식의 반대가 역참조입니다. 역참조는 일반참조와 달리 사용방법이 달라집니다. related_name이 선언되어 있지 않으면 (1)와 같이 역참조가 가능하며 선언되어 있으면 (2)와 같이 참조가 가능합니다. (2)번 방식이 일반적으로 선호됩니다. 혹시나 2개이상의 참조를 하는 경우 (1)번 방식은 동작을 하지 않기 때문입니다.

  • (1)
job1   = <related_table>.objects.get(id = 1)
people = job1.<relate_table>_set.all()
  • (2)
job1   = <related_table>.objects.get(id = 1)
people = job1.<related_name>.all()