answer_set.create() 에 대한 질문입니다.

194 views
Skip to first unread message

정의균

unread,
Apr 14, 2014, 9:25:07 AM4/14/14
to djan...@googlegroups.com
안녕하세요. 오늘부터 Django를 시작으로 웹프로그래밍에 도전하고 있는 학생입니다.
제 질문은요.
answer_set.create()에 대한 질문입니다. 갑자기 어디서 튀어나온건지 잘 모르겠습니다. 어떤 역할을 하는지두요.ㅜㅜ


#우선 제 모델을 임포트하구요.
>>>from questionsandanswers.models import Question, Answer

#q에 pk가 1인 오브젝트를 줬어요.
>>>q = Question.objects.get(pk=1)

#여기서 모르는 것이 튀어나옵니다.
>>>q.answer_set.create(content="Django")

#궁금해서 확인해보니 Answers에 Django가 들어있습니다.

>>>Answers.objects.all()
[<Answer: Django>] 


answer_set이 어디에서 튀어나온 것인지도 잘 모르겠구요. 역할이 무엇인지도 모르겠습니다.ㅜㅜ 구글링해도 잘 못 찾겠습니다.ㅜㅜ 조금만 도와주세요~

참고로 제 모델입니다.

class Question(models.Model):
    subject = models.CharField(max_length=200)
    description = models.TextField()
    publication_date = models.DateTimeField()
    def __str__(self):
        return self.subject
    def published_today(self):
        return self.publication_date.date() == timezone.now().date()

class Answer(models.Model):
    question = models.ForeignKey(Question)
    content = models.TextField()
    best_answer = models.BooleanField("preferred answer",default=False)
    def __str__(self):
        return self.content

Hyungyong Kim

unread,
Apr 16, 2014, 6:26:33 AM4/16/14
to djan...@googlegroups.com
만드신 모델로 데이터를 만든다면,

q1 = Question.objects.create(subject="hello", description="world", 
        publication_date=datetime.now) 

이렇게 질문을 만들 수 있고, 위 질문의 답은

a1 = Answer.objects.create(question=q1, content="blah...")

이렇게 만들 수 있겠죠. q1 이랑 a1 이랑 연결이 됐겠죠?

a1 만 알고 있을 때 q1은 a1.question 으로 알 수 있습니다. 

만을 q1을 알고 있을 때 관련된 모든 answer 들을 알고 싶으면, 그때 쓰는 것이

q1.answer_set 입니다. q 와 a 는 1:다 관계에 있어서 a.question 하면 하나의 질문을 얻지만
q 입장에서는 a 가 여러개 이기 때문에 answer_set.all() 이렇게 여러개의 답을 얻습니다. 

Question.objects.create 할 때  요기의 objects 가 쿼리셋 객체이고요,
방금 얘기한 answer_set 도 역시 쿼리셋 객체입니다. 

쿼리셋 객체에 create 메쏘드를 호출해서 데이터를 만들 수 있죠.
(answer_set.create 요렇게 쓰는건 저도 처음 봤네요) 

a1 = Answer.objects.create(question=q1, content="blah...") 

이것과

a1 = q1.answer_set.create(content="blah...") 

와 같습니다. (돌려보진 않았습니다만 아마도.)



김형용 드림


--
이 메일은 Google 그룹스 'Django-ko' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 django-ko+...@googlegroups.com에 이메일을 보내세요.
이 그룹에 게시하려면 djan...@googlegroups.com에 이메일을 보내세요.
http://groups.google.com/group/django-ko에서 이 그룹을 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.

이순연

unread,
Apr 16, 2014, 7:12:30 AM4/16/14
to djan...@googlegroups.com
Django ORM의 마술같은 메쏘드죠.
저도 처음에 이게 뭐지 신기해 했었습니다.

장고 프레임워크를 스타트하면 모델간의 관계(relation)를 스캔해서 xxx_set() 같은 메쏘드를 만든다고 합니다. ForeignKey 속성 중 related_name을 설정하여 해당 매쏘드 이름을 변경할 수도 있습니다.

question = models.ForeignKey(Question, related_name='answer2_set')

이런 식으로 말이지요.



-------------------------

미디어한국학 개발팀장 이 순연
010-4278-1346




2014년 4월 16일 오후 7:26, Hyungyong Kim <yon...@gmail.com>님이 작성:

이순연

unread,
Apr 16, 2014, 7:16:55 AM4/16/14
to djan...@googlegroups.com
추가로 말씀드리자면 answer_set 의 매쏘드명은 모델명 Answer 에서 따온 것입니다.
Question 모델 입장에서 보면 question과 관계된 "answer의 set" 이다는 의미 정도 이겠죠.

감사합니다.



-------------------------

미디어한국학 개발팀장 이 순연
010-4278-1346




2014년 4월 16일 오후 8:12, 이순연 <lee.so...@gmail.com>님이 작성:

정의균

unread,
May 6, 2014, 12:34:52 AM5/6/14
to djan...@googlegroups.com
오! 저번에도 질문 올렸을 때 친절하게 알려주셨는데 정말 감사합니다.
감사 답글 올린다는 것이 너무 늦었습니다. 죄송합니다.ㅜㅜ 사실 저번에 봤었는데 바로 해보느라고 감사인사 올리는걸 깜빡했습니다. ㅜㅜ

덕분에 이해가 잘 된 것 같습니다. 다시 한번 감사드립니다.
 
Reply all
Reply to author
Forward
0 new messages