점프 투 장고(여기)를 정리한 포스트입니다.
- SQLite를 데이터베이스로 사용한다
1
python manage.py migrate
migrate
명령어를 사용하여 admin, auth, contenttypes, sessions 앱들이 사용하는 테이블들이 생성된다
모델 작성하기
models.py
1
2
3
4
5
6
7
8
9
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()
- Question 모델과 Answer 모델을 구현한다
- Answer 모델은 질문에 대한 답변에 해당되므로 Question 모델을 속성으로 가져가야 한다
- 기존 모델을 속성으로 연결하려면
Foreignkey
를 사용해야 한다 on_delete=models.CASCADE
는 연관된 질문이 삭제될 경우 답변도 같이 삭제된다
파이보 앱 등록
1
2
3
INSTALLED_APPS = [
'pybo.apps.PyboConfig',
]
settings.py
파일에서 INSTALLED_APPS에pybo.apps.PyboConfig
를 추가해 테이블을 생성한다- 모델이 새로 추가되거나 변경되면
makemigrations
명령을 수행한 수migrate
명령을 수행해야 한다
1
2
3
4
#!/bin/bash
python3 manage.py makemigrations
python3 manage.py migrate
- migrate는 shell 파일로 한번에 실행하게 해줄수 있다
모델 사용하기
- 장고 셸을 사용해 모델을 사용해 본다
1
2
3
4
5
6
/DjangoProject/Django_practice ❯ python3 manage.py shell
Python 3.8.10 (default, Jun 2 2021, 10:49:15)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
- 위 명령어를 이용해서 장고 셸을 실행시킨다
- 장고 셸을 종료하려면
Ctrl+z
를 이용해 종료할 수 있다
Question 생성
1
>>> from pybo.models import Question, Answer
- Question, Answer 모델은 장고 셸에서 import 하여 사용할 수 있다
1
2
>>> q = Question(subject='', content='', create_date=timezone.now())
>>> q.save()
models.py
에서 정의한 모델들의 속성을 입력해서 데이터를 저장한다- 위와 같은 명령어로 데이터가 생성되면 데이터에 대한 id 값이 생성된다
>>> q.id
명령어로 알 수 있다
Question 조회
1
2
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>, <Question: Question object (2)>]>
- 위와 같은 명령어로 Question 모델을 조회할 수 있다
1
2
3
4
5
6
7
class Question(models.Model):
subject = models.CharField(max_length=200)
content = models.TextField()
create_date = models.DateTimeField()
def __str__(self):
return self.subject
- Question 모델에
__str__
메서드를 추가하면 id값 대신 제목을 표시할 수 있다
Question 수정
1
2
3
4
5
>>> q = Question.objects.get(id=2)
>>> q
<Question: 장고 모델 질문입니다.>
>>> q.subject = 'Django Model Question'
>>> q.save()
q
를 id 값이 2인 데이터로 선언하고 id 값이 2인 데이터의subject
의 내용을 수정한다- 수정한 후에는
q.save()
를 이용해 꼭 저장을 해야한다
Question 삭제
1
2
>>> q = Question.objects.get(id=1)
>>> q.delete()
q.delete()
로 저장된 데이터를 삭제할 수 있다