링크
이 페이지의 내용 정리 위캔입니다.
장고 셸 시작 방법
python manage.py shell
장고 셸 종료 방법
모델 작성
from django.db import models
class Question(models.Model):
subject = models.CharField(max_length = 200) # 제목은 최대 200글자만 가능하도록 설정
content = models.TextField() # 글자제한이 없는 텍스트는 TextField(), 제한이 있는 텍스트는 CharField(제한수)
create_date = models.DateTimeField() # 날짜와 시간에 관계된 속성은 DateTimeField()
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE) # ForeignKey는 다른 모델과 연결하기 위해 사용한다.
# on_delete = models.CASCADE 는 연결된 모델이 삭제될 경우 같이 삭제 된다는 의미이다.
content = models.TextField
creat_date = models.DateTimeField()
pybo 앱 등록
config/settings.py
파일의 INSTALLED_APPS
항목에 추가
INSTALLED_APPS = [
'pybo.apps.PyboConfig',
]
- INSTALLED_APPS에 추가한 pybo.apps.PyboConfig 클래스는 pybo/apps.py 파일에 있는 클래스이다. 이 파일은 pybo 앱 생성시 자동으로 만들어지는 파일로 따로 만들 필요가 없다. 이미 pybo/apps.py 파일 안에 다음과 같은 클래스가 구현되어 있을 것이다.
makemigrations
python manage.py makemigrations
- 명령어를 실행하더라도 실제로 테이블이 생성되지는 않는다. makemigrations 명령은 장고가 테이블 작업을 수행하기 위한 작업파일을 생성하는 명령어다. 실제 테이블 생성은 migrate 명령을 통해서만 가능하다.
sqlmigrate
python manage.py sqlmigrate pybo 0001
- sqlmigrate 명령은 단지 실행되는 쿼리만 조회할 뿐이다. 실제 쿼리가 수행되지는 않는다.
migrate
python manage.py migrate
모델 사용
import
from pybo.models import Question, Answer
Question 생성
from django.utils import timezone
q = Qustion(subject = '제목', content = '내용', create_date=timezone.now() // 현재 시간)
q.save()
q.save()
- 반드시 저장을 해야한다.
- 데이터 1건 생성되면 반드시 다음처럼 id값이 생성된다.
q.id
(q의 id를 확인하는 명령어)
- 결과 : 1
Question 조회
Question.objects.all()
- 결과 : <QuerySet [<Question: Question object (1)>]>
Question 조회 시 id값이 아닌 제목을 표시하도록 하는 메소드 추가
class Question(models.Model):
subject = models.CharField(max_length=200)
content = models.TextField()
create_date = models.DateTimeField()
# 추가
def __str__(self):
return self.subject
filter를 사용하여 조회
Question.objects.filter(id=1)
- id가 1인 Question 데이터를 조회하는 명령어
get을 사용하여 조회
Question.objects.get(id=1)
- get은 1건의 데이터를 조회할 때 사용한다.
- get과 filter의 차이는 get은 한 건만을 리턴하고 filter는 여러 건을 리턴한다
문자열이 포함된 데이터 조회
Question.object.filter(subject__contains='장고')
- subject에 '장고'가 포함된 데이터를 리턴한다.
- 언더바(_)가 2개이다.
Question 수정
q = Question.objects.get(id = 2)
- 반드시 get을 사용해야 한다.
q.subject = 'Django Model Question
- 위에서 선택한 object의 subject를 'Django Model Question'으로 변경한다.
q.save()
- 저장까지 마쳐야 적용된다.
Question 삭제
q = Question.objects.get(id = 1)
q.delete()
- 위 코드를 실행하면 해당 데이터가 삭제되고
(1, {'pybo.Question': 1})
라는 정보가 리턴된다.
- 리턴된 정보는 Question 모델이 1개 삭제되었음을 의미한다.
- 앞의 숫자는 삭제된 데이터 갯수를 의미
- 뒤의 숫자는 모델별 삭제된 숫자를 의미
Answer 작성
q = Question.objects.get(id = 2)
from django.utils import timezone
a = Answer(question = q, content = '나도 잘 모르겠어요.', create_date = timezone.now())
a.save()
Answer 조회
- Question과 동일한 방식으로 진행할 수 있다.
Answer를 이용해 Question 조회하기
a.question
Question을 이용해 Answer 조회하기
q.answer_set.all()
- 질문 하나에 여러 개의 답변이 가능하므로 _set.all()을 이용한다.