Home Django model 다루기 (점프 투 장고)
Post
Cancel

Django model 다루기 (점프 투 장고)

점프 투 장고(여기)를 정리한 포스트입니다.

  • 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()로 저장된 데이터를 삭제할 수 있다
This post is licensed under CC BY 4.0 by the author.

머신러닝 프로젝트 (Hands-On Machine Learning Part1)

Python 함수 및 속성 정리