Model field reference
3. Relationship fields
01. ForeignKey
- Database Representation
- Arguments
02. ManyToManyField
- Database Representation
- Arguments
03. OneToOneField
01. ForeignKey
Database Representation
Arguments
ForeignKey는 연관된 작용들이 어떻게 일어나는지 상세하게 정의하는 다른 인수를 받을 수 있습니다.
ForeignKey.on_delete
Foreignkey를 통해 참조되었던 어떤 개체가 삭제되었을 때, 장고는 그 삭제를 제약하는 SQL의 작동을 이 on_delete인수를 통해 막아냅니다. 예를들어, 우리가 비어있어도 되는(nullable) ForeignKey를 가지고 있다고 칩시다. 그리고 우리는 참조된 개체가 삭제되었을 때, 이 ForeignKey가 비어있는(null) 것으로 설정되기를 원합니다.
user = models.ForeignKey( user, models.SET_NULL, blank=True, null=True )
on_delete가 가능한 값들은 django.db.models에서 확인할 수 있습니다.
- CASCADE
- cascade를 삭제합니다. 장고는 SQL이 강제적으로 ON DELETE CASCADE를 진행하는 것을 막고 ForeignKey에 포함된 개체들을 삭제합니다.
02. ManyToManyField
class ManyToManyField(othermodel, options)
하나의Many-To-Many 관계는 하나의 위치인수를 요구합니다. 모델이 연결 된 클래스는 ForeignKey에 연결되었을 때와 완벽히 똑같게 동작합니다. recursive와 lazy 관계를 포함해서 말입니다.
RelataeManager를 통해 연결된 개체들을 추가, 삭제, 생성할 수 있습니다.
Database Representation
보이는 곳의 뒤쪽에서, 장고는 Many-To-Many 관게를 표현하기 위해 하나의 중재용 join테이블을 만듭니다. 기본적으로, 이 중재용 테이블의 이름은 many-to-many필드의 이름을 사용해서 만들어집니다. 그리고 이 모델 테이블의 이름은 그것을 포함하고 있습니다. 왜냐하면 몇몇 데이터 베이스들이 특정 길이 이상의 테이블의 이름을 지원하지 않기 때문에, 이러한 테이블의 이름들은 자동적으로 64글자 이하로 잘립니다. 그리고 특수한 해쉬가 사용됩니다. 이것은 우리가 author_books_9cdf4와 같은 테이블의 이름을 보게 된다는 뜻입니다. 이 이름은 완벽히 평범한 예시입니다. 물론 이 이름은 db_table 옵션에서 수동으로 직접 지정할 수도 있습니다.
Arguments
ManyToManyField는 인수의 extra set을 사용할 수 있습니다. 이 세트는 모조리 선택적입니다. 그리고 관계적 함수가 작동하는 방식을 조종합니다.
ManyToManyField.related_name은 ForeignKey.related_name과 같습니다.
ManytoManyField.related_query_name 은 ForeignKey.related_query_name 과 같습니다.
ManyToManyField.limit_choices_to 는 ForeignKey.limit_choices_to 와 같습니다.여기서 limit_choices_to 는 throubh 파라미터를 사용하면서 custom intermediate 테이블과 함께 ManyToManyField 위에서 사용될 때 아무런 효과도 발휘하지 않습니다.