장고 외래키 참조에 대한 질문입니다.
조회수 581 답변수 1 반응수 2 등록일 2019.04.20 21:43:30

안녕하세요 초보입니다.

post와 comment가 1:N 관계이고, comment에선 post의 pk를 fk로 갖도록 설정되어 있는 상태입니다.



post1 = Post.objects.all().first()

Comment.objects.create(post=post1, msg='django')


위와 같은 코드를 입력해서 첫번째 post와 연관된 comment를 생성하려고 합니다.


질문은

어떻게 post1이라는 객체(?), record(?)를 post=post1처럼 작성했는데 그걸 fk로 사용하는가 입니다.

ORM이 아닌 mysql 같은 경우 외래키를 직접 참조할 테이블의 pk(int형 숫자)로 지정하는 것 같은데 ... 내부적으로 어떻게 동작해서 저런 record를 직접 입력해도 외래키 참조를 할 수 있는지 궁금합니다.


안녕하세요 장고고장님.


장고 ORM의 내부적인 동작방식에 대해 깊게 알고 있진 않아 명쾌한 답은 안되겠지만

장고 내부적으로 Target model의 PK를 가져와서 ORM에서 처리해주는 걸로 알고 있습니다.


아래는 장고 소스에 있는 코드인데 model에서 ForeignKey를 선언할 때 to_field 인자를 넘겨주면 최상위로 선택되고 to_field가 없으면 model의 PK을 가져오는 걸 알 수 있습니다.


  1. to_field = to_field or (to._meta.pk and to._meta.pk.name)


조금이나마 도움이 되셨으면 좋겠습니다.

2019.04.21 02:43:22 반응 이력

답변 작성

질문에 적합한 답변을 상세히 작성해 주시기 바랍니다.

답변이 찬성되면 태그평판 +2점이 적립, 반대되면 태그평판 -1점 차감됩니다.

답변이 채택되면 태그평판 +10점이 적립됩니다.