모델(Model)을 이용하여 데이터베이스를 처리 - SQL 쿼리문의 도움없이 데이터를 쉽게 처리 가능
migrate 명령을 실행하여 해당 앱들이 필요로 하는 테이블들을 생성
(mysite) C:\projects\mysite>python manage.py migrate
질문과 답변을 할 수 있는 파이썬 게시판(Python Board) 서비스 -> 질문과 답변에 해당하는 데이터 모델필요
Question 모델 : subject, contetn create_date
Answer 모델 : question, content, create_date
[C:\projects\mysite\pybo\models.py]
from django.db import models
class Question(models.Nodel):
subject = models.CharField(max_length=200)
content = models.TextField()
create_date = models.DateTimeField()
class Answer (models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
content = models.TextField()
create_date = models.DateTimeField()
각각의 class 모델에 맞는 속성 Field 을 갖도록 작성.
CharField : 길이 제한 텍스트
TextField : 글자수 제한 없는 텍스트
DataTimeField : 날짜 시간 속성
ForeignKey : 기존모델 속성으로 가져갈 때. 다른 모델 연결 (Q 모델을 속성으로 가져와야함)
on_delete=models.CASCADE : 연결된 Q가 삭제되면 A도 삭제.
모델 이용해서 테이블 생성
python manage.py makemigrations
python manage.py migrate
mirgate 명령 수행
모델이 변경되면 makemigrations 명령을 먼저 수행한 후에 migrate 명령을 수행
장고 쉘 이용해서 모델 사용법 알아보기
(mysite) c:\projects\mysite>python manage.py shell
장고쉘에서 모델 임포트
from pybo.models import Question, Answer
Q 모델 이용해서 데이터 만들기
>>> from django.utils import timezone
>>> q = Question(subject='pybo가 무엇인가요?', content='pybo에 대해서 알고 싶습니다.', create_date=timezone.now())
>>> q.save()
q.id
로 id값(Primary Key; PK) 확인 가능.
같은 방식으로 2번째 질문 생성 가능. id는 하나씩 추가됨.
저장된 데이터 조회하기
모델명.objects
: 결과값으로는 QuerySet객체가 리턴 - id 값으로
Question.objects.all()
: Question에 저장된 모든 데이터를 조회
Question.objects.filter(id=1)
: 특정 조건에 맞는 데이터 모두 조회.
Question.objects.get(id=1)
: 특정 데이터 1건만 조회
__str__
메서드를 모델에 추가하면 id 대신 제목 표시 가능
# [C:\projects\mysite\pybo\models.py]
def __str__(self):
return self.subject
quit()
모델에 메서드 추가되면 쉘 재시작 해야 변경 결과 확인 가능.
재시작 시 Q모델 다시 import 해야함.
# 결과
>>> q = Question.objects.get(id=2)
>>> q
<Question: 장고 모델 질문입니다.>
>>> q.subject = 'Django Model Q'
>>> q.save()
>>> q
<Question: Django Model Q>
delete()
>>> q = Question.objects.get(id=1)
>>> q.delete()
필요 메서드 임포트하기
Q 조회 후 속성에 대입
A 작성.
save()
get(id= ) 로 조회
A객체 a를 사용하면 연결된 q도 조회가능 a.question
q.answer_set.all()
사용하면 질문의 모든 A 가져오기 가능
q = Question(subject='pybo가 무엇인가요?', content='pybo에 대해서 알고 싶습니다.', create_date=timezone.now()) 이걸 입력하면
Traceback (most recent call last):
File "", line 1, in
NameError: name 'timezone' is not defined
이렇게 나오는데 어떻게 해결하죠.....