python [manage.py](http://manage.py) migrate
- 앱이 필요로 하는 데이터베이스 테이블 생성models.py
from django.db import models
# Create your models here.
class Question(models.Model):
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()
테이블 생성
INSTALLED_APPS = [
'pybo.apps.PyboConfig', #추가 -> pybo/app.py 에 있는 클래스
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
python [manage.py](http://mange.py) makemigrations
- 모델 신규 생성, 변경시 migrate
보다 먼저 수행python [mange.py](http://mange.py) migrate
- 모델 속성 변경시 필요,메서드 추가시에는 필요 없음.python [manage.py](http://manage.py) sqlmigrate {앱이름} {작업번호}
- 어떤 쿼리가 실행되는지 확인만Shell로 모델 사용하기
python [manage.py](http://manage.py) shell
from pybo.models import Question, Answer
# 질문 생성 (Question)
from django.utils import timezone
q = Question(subject='pybo가 무엇인가요?', content='pybo에 대해서 알고 싶습니다.', create_date=timezone.now())
q.save()
q.id
# 질문 조회
Question.objects.all()
# -- filter를 활용한 조회 : 조건에 해당되는 데이터 모두 return
# -- get을 활용한 조회 : 유일 값. 조건 만족 데이터가 없을 시 오류 발생
Question.objects.filter(id=1)
Question.objects.get(id=1)
Question.objects.filter(subject__contains='장고')
# 질문 수정
q = Question.objects.get(id=2)
q.subject = 'Django Model Question'
q.save() # 반드시 해야 반영됨.
# 질문 삭제
q = Question.objects.get(id=1)
q.delete()
# 답변 작성
q = Question.objects.get(id=2)
from django.utils import timezone
a = Answer(question=q, content='네 자동으로 생성됩니다.', create_date=timezone.now())
a.save()
# 답변 조회
a = Answer.objects.get(id=1)
a.question #객체 a를 사용해 답변에 연결된 질문도 조회
q.answer_set.all() #질문에 연결된 답 가져오기
속성__contains= ' '
- 속성에 특정 값이 있는지.연결모델명_set
- 자주 쓰임, 연결된 것 가져오기