개발 인생/디장고

[django] choice_set란

견과류아몬드 2021. 7. 2. 16:37

장고 튜토리얼을 공부 진행중이었다.

 

이전까지는 각 모듈, 클래스, 메소드를 이용해서 질의로 값을 주고 받는 db 형식임을 알 수 있었다.

 

그러나 진행 도중 choice_set이라는 것이 등장했다.

 

테이블도 아니고 하나의 쿼리 셋도 아니고 이게 뭔가 싶었다.

 

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

 

나와 같은 문제를 본 사람이 존재하였다. 번역에 따르면

                                                                                                                                 

당신은 Choice에 관한 Foreign Key(secondary key)를 만들어 각각의 Choice를 하나의 Question에 관계시켰다.

따라서, 각각의 Choice는 명시적으로
(모델에서 당신이 선언한) 하나의 Question 필드를 가지고 있다.

DjangoORMQuestion에서 역방향으로 관계를 따르며,
각 인스턴스에 foo_set이라 불리는 필드를
자동으로 생성한다. 여기서 Foo는 해당 모델에 대한
Foreign Key 필드가 있는 모델이다.

choice_set 은 'Question'인스턴스와 관련된 'Choice'개체의 쿼리 세트를 만들 수 있는
'RelatedManager'
이다. (예: q.choice_set.all())

                                                                                                                                  

라고 한다.

 

여기서 'Choice', 'Question'은 튜토리얼을 진행하는 과정에서 models.py에 생성하는 예제 클래스이다.

 

추가적으로 기본적으로 객체에 접근할 수 있는 매니저의 이름은 모델명(소문자)_set 으로 지어진다고 한다.

 

ex1)

Question.objects.get(pk=1) // Question 모델에서 pk 값이 1인 row를 가져온다.

<Question: What's up?>

q = Question.objects.get(pk=1) q.choice_set.all() // 자신을 참조하는 모델이름을 lowercase_set을 이용해 접근한다. <QuerySet []>

q.choice_set.create(choice_text='Not much', votes=0) // Choice 모델에 row를 생성 <Choice: Not much>

 

c = Choice.objects.get(pk=1) // pk=1인 Choice row를 가져온다. c

<Choice: Not much>

c.question // 미리 ForeignKey로 정해둔 변수를 통해 Question 모델에 접근한다.

<Question: What's up?>

c.question.question_text "What's up?

 

이 그림은 내가 이해한 바로 표현해본 것이다.

 

# 이하 생략...
https://stackoverflow.com/questions/2048777/django-tutorial-what-is-choice-set

출처: https://milhouse93.tistory.com/69

 

[Django]choice_set은 무엇입니까?

장고 튜토리얼을 따라하던 중 아래와 같은 코드가 나왔다. p.choice_set.create(choice='Not much', votes=0) 갑분 choice_set..? 또 찾아봐야지. 역시 나와 같이 당황한 사람을 stack overflow에서 바로 찾을 수..

milhouse93.tistory.com