이 장고 앱 튜토리얼에서 choice_set은 무엇입니까?


144

Django 튜토리얼에는 첫 번째 Django 앱 작성, 1 부이 줄이 있습니다 .

p.choice_set.create(choice='Not much', votes=0)

choice_set존재 는 어떻게 부름을 받는가?

choice부분이 Choice튜토리얼에서 사용되는 모델의 소문자 버전 이라고 가정 하지만 무엇 choice_set입니까? 정교하게 할 수 있습니까?

업데이트 : Ben 의 답변을 바탕 으로이 문서를 찾았습니다 : "뒤로"관계를 따르십시오 .


나는 그 문서에 방금 연결 했어야했는데, 그것은 내 대답보다 명확합니다.
벤 제임스

@Ben James : 아니요, 다른 방식으로 공식화 해 주셔서 감사합니다. 특히 ORM이 수행하는 작업의 정교함입니다. Django 문서는 때때로 간결 할 수 있습니다.
피터 Mortensen

40
이 질문을 해 주셔서 감사합니다. 튜토리얼에서 설명하지 않기 때문에 혼란 스럽습니다.
claudio

4
와, 그것은 초보자를위한로드 된 코드 라인입니다. 저에게 장애물은 우리가 질문과 관련하여 선택 개체를 얻는다는 것을 이해하고 선택을 증가시킵니다. 지금까지 자습서에서 RelatedManager 개념을 언급하지 않았으므로 실제 걸림돌이 될 수 있습니다.
frozenjim

@PeterMortensen 설명이있는 곳에서 설명서를 업데이트 할 수 있습니까? 감사합니다
MH

답변:


178

Choice각각과 관련이 있는 외래 키를 만들었습니다 Question.

따라서 각 필드에는 모델에서 선언 Choicequestion필드 가 명시 적으로 있습니다 .

Django의 ORM은 관계를 거꾸로 따릅니다. Question각 인스턴스 foo_set에서 Foo해당 모델에 대한 ForeignKey필드 가있는 모델 인 where 라는 필드를 자동으로 생성합니다 .

choice_setA는 RelatedManager의 검색어 세트 만들 수있는 Choice받는 관련된 개체 Question예 인스턴스q.choice_set.all()

foo_setDjango가 자동으로 선택 하는 이름 지정이 마음에 들지 않거나 동일한 모델에 대해 둘 이상의 외래 키가 있고 구별 해야하는 경우에 related_name인수를 사용하여 자신의 재정의 이름을 선택할 수 있습니다 ForeignKey.


감사. 나는 지금 훨씬 더 알고있다. choice_set이 "관리자"가 아닙니까? (QuerySet 클래스의 인스턴스를 리턴 할 수 있음). 아니면 같은 것입니까?
Peter Mortensen

2
맞습니다 RelatedManager. 쿼리 세트를 만들 수 있습니다.
벤 제임스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.