programing

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

newstyles 2023. 7. 8. 10:41

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

장고 튜토리얼 첫 장고 쓰기 파트 1:

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

어떻게 있다.choice_set존재를 불러왔고 그것은 무엇입니까?

내 생각엔choice부품은 모델의 소문자 버전입니다.Choice튜토리얼에서 사용되었지만, 무엇이choice_set자세히 말씀해 주시겠어요?

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

다음 날짜에 외부 키를 생성했습니다.Choice그것은 각각을 a와 연관시킵니다.Question.

그래서 각각.Choice을 명시적으로 가지고 있습니다.question모델에서 선언한 필드입니다.

장고의 ORM은 다음과 같은 관계를 역순으로 따릅니다.Question또한, 각 인스턴스에서 필드를 자동으로 생성합니다.foo_set어디에Foo모델이 다음과 같습니다.ForeignKey필드를 해당 모델로 이동합니다.

choice_set이다.RelatedManager의 쿼리 세트를 만들 수 있습니다.Choice에 관련된 물체들Question예를 들어,q.choice_set.all()

만약 당신이 그것을 좋아하지 않는다면.foo_setDjango가 자동으로 선택하는 이름 또는 동일한 모델에 대한 두 개 이상의 외래 키가 있고 그것들을 구별해야 하는 경우, 당신은 다음과 같은 인수를 사용하여 당신 자신의 우선 이름을 선택할 수 있습니다.ForeignKey.

여기에는 두 가지 중요한 질문이 있습니다. 번째: 안녕하십니까?choice_set존재하게 된 번째:그것은 무엇일까요?

저와 같은 모든 새로운 개발자들을 위해, 제가 어떻게 그것을 쉽게 만들었는지 설명하겠습니다.두 번째 질문에 먼저 답하겠습니다."뭐지?" 이 세 단어를 통해?모델 인스턴스, 해당 인스턴스와 관련된 개체 집합 Related_manager.

장고 튜토리얼에서 Models.py :

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

인스턴스:

q = Question.objects.get(pk=3)
# Here q is an instance of model class 'Question'.

c = Choice.objects.get(pk=32)
# Here c is an instance of model class 'Choice'.

'Model Instance' is a single 'ROW' of an entire 'TABLE' of your database

자, 그.Question Model로 사용됩니다.foreign key에게Choice Model따라서 인스턴스 q와 관련된 모든 개체 집합은 다음을 사용하여 필터링할 수 있습니다.

q.choice_set.all()

그러므로,choice_set여기, pk=3인 질문과 관련된 모든 선택지가 있습니다.

자, 첫 번째 질문에 대한 답은 세 번째 단어 Related Manager가 필요합니다.장고 설명서는 여기에 있습니다.

모델에 ForeignKey가 있는 경우 ForeignKey 모델의 인스턴스는 첫 번째 모델의 모든 인스턴스를 반환하는 Manager에 액세스할 수 있습니다.기본적으로 이 관리자의 이름은 FOO_set입니다. 여기서 FOO는 원본 모델 이름으로 소문자로 표시됩니다.이 관리자는 위의 "개체 검색" 섹션에 설명된 대로 필터링 및 조작할 수 있는 QuerySet을 반환합니다.

이 단어(choice_set)는 Foreign_key의 'related_name' 매개 변수를 사용하여 변경할 수 있습니다.

question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name="choices")

외부 키를 통한 역방향 관계의 경우:

q.choice_set.all()
# If using related_name, then it is same as 
q.choices.all()

# All the choices related to the instance q.

전진 관계의 경우:

choice_qs = Choice.objects.all()
choice_qs.filter(question=q)
# Same result as above. All the choices related to instance q.

언급URL : https://stackoverflow.com/questions/2048777/what-is-choice-set-in-this-django-app-tutorial