Django
The web framework for perfectionists with deadlines.
docs.djangoproject.com
Question 수정
https://wikidocs.net/70650
2-02 모델
* `[완성 소스]` : [github.com/pahkey/jump2django/tree/2-02](https://github.com/pahkey/jump2django/tree/…
wikidocs.net
이번에는 저장한 Question 데이터를 수정해 보자. 먼저 다음과 같이 id 값이 2인 데이터를 조회한다.
>>> q = Question.objects.get(id=2)
>>> q
<Question: 장고 모델 질문입니다.>
q.subject = '수정합시다'
q.save()
#삭제 q.delete()
Answer 작성 ( FK :: question, subject, content, create_date)
Answer 레코드 추가시, FK 인 question 값을 넣기 위해, Question 의 외래키(id) 를 조회 후, 대입
a = Answer(question= q, subject='답변', content = '냉무', create_date=timezone.now())
>>> q = Question.objects.get(id=2)
>>> q
<Question: Django Model Question>
>>> from django.utils import timezone
>>> a = Answer(question=q, content='네 자동으로 생성됩니다.', create_date=timezone.now())
>>> a.save()
답변 데이터를 만들기 위해서는 질문이 필요하므로 id가 2인 질문을 먼저 조회한 후 question 속성에 대입해 주었다.
Answer 모델도 Question 모델과 마찬가지로 유일한 값을 의미하는 id가 자동으로 생성 된다.
>>> a.id
1
답변과 연결된 질문을 찾는다. 구매자가 구매한 물품, 예약자가 예약한 상품을 조회할 수 있다.
_set 어트리뷰트로 나를 참조하는 레코드 조회시, filter get 으로만 사용 가능하다. filter는 쿼리셋이라서 안됨.
a.question
원 글의 댓글 조회 : q.answer_set.all()
현 상품의 구매자 조회 : item.customer_set.all()
카테고리에 소속된 글 : category.post_set.all()
답변을 조회하는 방법은 질문과 마찬가지로 Answer의 id 값을 사용하면 된다.
>>> a = Answer.objects.get(id=1)
>>> a
<Answer: Answer object (1)>
답변에 연결된 질문도 조회할 수 있다.
>>> a.question
<Question: Django Model Question>
Answer 모델 객체인 a를 통해서 질문을 찾는것은 Answer 모델에 question 속성이 연결되어 있기 때문에 매우 쉽다. 그렇다면 질문을 이용하여 답변을 찾는 것은 가능할까?
가능하다. 다음처럼 하면 된다.
>>> q.answer_set.all()
<QuerySet [<Answer: Answer object (1)>]>
q.answer_set을 사용하면 질문에 연결된 답변을 가져올 수 있다. Question 모델에는 answer_set 이라는 속성이 없지만 Answer 모델에 Question 모델이 ForignKey로 연결되어 있기 때문에 q.answer_set 과 같은 역방향 접근이 가능하다.
연결모델명_set(예:answer_set)은 상식적으로 생각하면 더 쉽다. 질문 하나에는 여러개의 답변이 가능하므로 q.answer_set이 가능하지만 답변 하나에는 여러개의 질문이 있을 수 없으므로 a.question_set은 불가능하다. 답변 하나에는 질문 하나만 가능하기 때문에 a.question만 가능하다.
정말 신통방통한 장고의 기능이 아닐수 없다. 연결모델명_set 방법은 자주 사용하니 꼭 기억해 두도록 하자.
'장고 > 점프투장고' 카테고리의 다른 글
forms.py 에서 폼디자인( form.as_p 폼위젯, 수동폼 사용) (0) | 2023.11.12 |
---|---|
테이블 모양 / 부트스트랩 (0) | 2023.11.12 |
settings.py : templates , static, media_url (0) | 2023.11.12 |
폼 + 상품의 총 구매수 {{ q.answer_set.count }} 출력 (0) | 2023.11.12 |
NoReverseMatch at /b2b/2/ Reverse for '....' with arguments 오류 (1) | 2023.11.12 |
url 네임스페이스(app_name) 과 url 별칭. {% url '' , redirect (1) | 2023.11.12 |
장고 템플릿 문법 (0) | 2023.11.12 |
점프 투 장고. 재실습 (0) | 2023.11.11 |
댓글