모델 사용법을 Django shell로 익혀보자.
Django Shell 이란
- Django 프로젝트 설정이 로딩된 파이썬 쉘
- 일반 파이썬 쉘을 통해서는 Django 프로젝트 환경에 접근 불가
- 프로젝트 내의 각종 모듈 패키지를 활용하기 위해 Django Shell을 통해 접근해야 함
- Django Shell은 Django에 필요한 환경들이 자동으로 설정되어 실행됨
터미널에 아래 코드를 입력한다.
python manage.py shell
< Question >
1. 생성
① Question 모델 import
from test_pages.models import Question
② Question 모델로 첫 번째 질문 data 생성
from django.utils import timezone
creat_data에서 시간 정보를 사용하므로 필요한 모듈을 import 한다.
Django는 UTC(국제 표준 시간)를 지원하며 settings.py 파일에서 확인 가능하다.
기본적으로 TIME_ZONE = 'UTC', USE_TZ = True로 설정이 되어있다.
q = Question(subject = '가격 문의 드립니다.', content = '한라봉 3kg에 얼마인가요?',
create_date = timezone.now())
q.save()
③ 생성 여부 확인 - 데이터 한 건 당 id값이 부여된다.
>>> q.id
1
id 확인을 위해 위의 코드를 입력하면 1이 출력된다.
id 값은 데이터를 생성할 때마다 1씩 증가한다.
④ Question 모델로 두 번째 질문 data 생성 + id 확인
q = Question(subject = '가격 문의 드립니다.', content = '천혜향 3kg에 얼마인가요?',
create_date = timezone.now())
q.save()
q.id
2가 출력되면 성공적으로 data가 생성된 것이다.
2. 조회
저장한 데이터(한라봉과 천혜향 가격 문의)를 조회해 보자.
아래 코드를 입력하고 출력값을 확인해 보자.
Question.objects.all()
① Question조회 시 제목으로 표시 - __str__ 메서드 추가
결과값으로 나온 QuerySet을 보면 2개의 Question 객체를 포함하고 있으며 괄호 안의 숫자가 데이터의 id 값이다.
조회했을 때 id 값 대신 제목을 표시하려면 test_pages/models.py 파일에 아래처럼 __str__ 메서드를 추가하면 된다.
모델에 메서드가 추가되었으므로 shell을 재시작해야 변경된 결과를 확인할 수 있다. (migrate는 속성 변경 시에만 수행)
shell 종료는 Ctrl+z 또는 quit() 를 입력하면 된다.
② id값으로 조회
Question.objects.filter(id=숫자)
Question.objects.get(id=숫자)
'숫자' 부분에 출력하고 싶은 Question의 id 값을 넣어서 출력하면 해당 데이터가 반환된다.
id 값은 유일한 값이므로 filter 대신 get을 이용하여 조회할 수도 있다.
filter는 조건에 맞는 데이터를 모두 반환하므로 QuerySet으로 출력되나 get은 한 건만 반환하므로 객체가 반환된다.
단, get 사용 시 조건에 맞는 데이터가 없으면 오류가 발생한다.
보통 get은 id와 같은 유일한 값으로 조회할 경우에만 사용한다.
③ 문자열로 조회
subject에 특정 문자열이 포함된 데이터만 조회해보자.
__contains 에서 언더바( _ ) 2개 쓰는 것에 주의하며 아래 코드를 입력한다.
Question.objects.filter(subject__contains = '문자열')
3. 수정
① id 값이 2인 데이터 조회
q = Question.objects.get(id=2)
② subject 속성 수정
q.subject = '천혜향 가격'
③ 수정 사항 저장
q.save()
수정사항은 반드시 저장해야 변경된 데이터가 반영된다.
4. 삭제
① id 값이 2인 데이터 삭제
q = Question.objects.get(id=2)
q.delete()
삭제 시 (1, {'test_pages.Question': 1}) 이 출력되는데 앞 숫자는 삭제된 데이터의 개수를, 뒤 숫자는 모델 별 삭제된 숫자를 의미한다.
삭제 후 데이터를 새로 만들어도 id 값은 삭제된 데이터 포함하여 1씩 증가한다.
< Answer >
1. 작성
답변 데이터 생성을 위해서는 질문이 필요하므로 먼저 답변할 질문을 조회하고 question 속성에 대입했다.
q = Question.objects.get(id=1)
a = Answer(question = q, content = '택포 30,000원 입니다.', create_date = timezone.now())
a.save()
2. 조회
① id 값으로 조회
a = Answer.objects.get(id=1)
a.question 입력하여 답변에 연결된 질문도 조회할 수 있다.
② 질문으로 조회 - 연결 모델명_set
q.answer_set.all()
질문 하나에는 여러 개의 답변이 가능하므로 q.answer_set 이 가능하지만 답변 하나에 여러 개의 질문이 있을 수는 없으므로 a.question_set 은 불가능하다.
'장고' 카테고리의 다른 글
장고(Django) | 페이지에서 모델 조회하기 (0) | 2022.01.22 |
---|---|
장고(Django) | 장고 관리자(admin) (0) | 2022.01.20 |
장고(Django) | 모델 작성하기 (0) | 2022.01.19 |
장고(Django) | 앱 생성하기 (0) | 2022.01.19 |
장고(Django) | 프로젝트 생성하기 (0) | 2022.01.19 |