[Django] 장고 Model 생성하기

IBLOG·2023년 5월 29일
0

Django

목록 보기
4/7
post-thumbnail

Django Model

장고는 모델(Model)을 통해 데이터베이스를 처리한다.
보통 DB는 SQL 쿼리를 통해 CRUD를 하는데, 장고는 모델을 통해 쿼리문 없이 데이터를 처리할 수 있다.

settings.py 파일에서 데이터베이스에 대한 정보를 확인할 수 있다.
데이터베이스 파일은 BASE_DIR 디렉터리 밑에 db.sqlite3 파일에 저장한다고 정의되어 있다. BASE_DIR은 프로젝트 디렉터리를 의미한다.

SQLite는 주로 개발용이나 소규모 프로젝트에서 사용되는 가벼운 파일 기반의 데이터베이스이다. 개발시에는 SQLite를 사용하여 빠르게 개발하고 실제 운영시스템은 좀 더 규모있는 DB를 사용하는 것이 일반적인 개발 패턴이다.

python manage.py migrate

위의 명령어를 통해 해당 앱들이 필요로 하는 데이터베이스 테이블들을 생성할 수 있다.
migrate를 수행하면 admin, auth, contenttypes, sessions 앱들이 사용하는 테이블들이 생성된다.

1. Model 작성하기

질문과 답변을 할 수 있는 파이썬 게시판을 만들어보자.

from django.db import models


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

Question 모델은 제목(subject), 내용(content) 그리고 작성일시(create_date)를 속성으로 갖도록 작성했다.
제목은 최대 200자까지 가능하도록 max_length=200을 설정하였다.

  • 제목처럼 글자수의 길이가 제한된 텍스트는 CharField를 사용한다.
  • 내용(content)처럼 글자수를 제한할 수 없는 텍스트는 위처럼 TextField를 사용한다.
  • 작성일시처럼 날짜와 시간에 관계된 속성은 DateTimeField를 사용한다.

Answer

Answer 모델은 질문에 대한 답변에 해당되므로 Question 모델을 속성으로 가져가야 한다.
기존 모델을 속성으로 연결하려면 ForeignKey를 사용해야 한다.

  • ForeignKey는 다른 모델과 연결하기 위해 사용한다.
  • on_delete=models.CASCADE의 의미는 이 답변과 연결된 질문(Question)이 삭제될 경우 답변(Answer)도 함께 삭제된다는 의미이다.

2. 앱에 등록하기

main.apps.MainConfig를 INSTALLED_APPS 항목에 추가한다.

3. makemigrations

모델을 변경 혹은 신규로 생성되면 makemigrations 명령어를 수행해야한다.

python manage.py makemigrations

4. migrate

makemigrations 명령을 수행하더라도 실제로 테이블이 생성되지는 않는다.
makemigrations 명령은 장고가 테이블 작업을 수행하기 위한 작업 파일(예: 0001_initial.py)을 생성하는 명령어다. 실제 테이블 작업은 migrate 명령을 통해서만 가능하다.

python manage.py migrate

5. admin.py에 추가하기

만들어진 모델을 관리지가 관리 할 수 있도록 admin.py에 정보를 추가해주는 과정이 필요하다.

쉘에서 수행하는 데이터 저장, 수정, 삭제 등의 작업을 장고 admin 페이지에서 처리할 수 있게된다.

모델이 추가되었음을 볼 수 있다.

6. 데이터 추가하기

Add를 통해 모델에 정의한 형태의 Form을 볼 수 있다.

Save : 해당 유형의 객체에 대한 변경사항을 저장하고, 변경된 목록 페이지를 보여준다.
Save and another : 변경사항을 저장하고, 해당 유형의 객체에 대한 비어있는 새로운 입력창을 보여준다.
Save and continue editing : 해당 객체에 대한 변경사항을 저장하고, 현재 편집창을 갱신한다.

profile
✢ 천천히 하나씩 기록해보자!

0개의 댓글