모델

장고는 모델(model)을 이용하여 데이터베이스(DB)를 처리한다. 모델을 사용하면 SQL 쿼리문 도움없이 데이터를 쉽게 처리할 수 있다.

pybo는 질문과 답변을 할 수 있는 파이썬 게시판 서비스이다.

질문과 답변에 해당하는 데이터 모델을 만들어 보자.

모델 속성

질문(Question) 모델에는 최소한 아래의 속성이 필요하다.

속성명 설명
subject 질문의 제목
content 질문의 내용
create_date 질문을 작성한 일시

답변(Answer) 모델에는 최소한 아래의 속성이 필요하다

속성명 설명
question 질문
content 답변의 내용
create_date 답변을 작성한 일시

models.py

모델을 만들자

[파일명 : c\projects\yoursite\pybo\models.py] 내용 전체 대체

from django.db import models


class Question(models.Model):
    subject = models.CharField(max_length=200)
    content = models.TextField()
    create_date = models.DateTimeField()
    
    def __str__(self):
        return self.subject


class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    content = models.TextField()
    create_date = models.DateTimeField()

Question 모델

Quesetion 클래스를 통해 DB에 접속

제목은 최대 200자 까지 가능하도록 django.db 모듈의 models에서 CharField()를 통해 정의,

내용은 무제한 글자수의 텍스트로 만들기 위해 TextField()를 통해 정의,

작성일자는 날짜와 시간의 속성을 지닌 DataTimeField()를 통해 정의

__str__ 메서드 통해, 조회를 했을 때 id값 대신 제목이 표시되게 했다.

Answer 모델

Answer 클래스를 통해 DB에 접속

질문은 Question 모델의 속성을 가져야 하므로 ForeignKey()로 연결. Question과 연결하고, 연결된 질문(Question)이 삭제될 경우 답변(Answer)도 함꼐 삭제 된다는 의미

여러 속성의 Field 타입

https://docs.djangoproject.com/en/3.0/ref/models/fields/#field-types

pybo 앱 등록

작성한 모델을 사용하여 테이블을 생성해보자

테이블 : 데이터베이스에서 데이터를 저장하기 위한 데이터 집합의 모임. 데이터 표라 생각하자.

먼저 DB관련 작업을 수행하기 위해서, pybo앱을 config\settings.py에 등록하자

(생략)
INSTALLED_APPS = [
    #'pybo.apps.PyboConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    (생략)
]
(생략)

migrate / makemigrations

python manage.py migrate를 통해 migrate를 시키면, 테이블이 생성된다.

(yoursite) C:\projects\yoursite>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

모델이 신규로 생성되거나 변경되면 python manage.py makemigrations을 통해 makemigrations를 해야한다.

(yoursite) C:\projects\yoursite>python manage.py makemigrations
Migrations for 'pybo':
  pybo\migrations\0001_initial.py
    - Create model Question
    - Create model Answer

다시 모델이 업데이트된 테이블을 생성하자

(yoursite) C:\projects\yoursite>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, pybo, sessions
Running migrations:
  Applying pybo.0001_initial... OK

테이블 생성이 완료되었다.

이제 명령 프롬프트에서 모델의 클래스를 활용하여 DB를 이용할 수 있으나, 후에 UI를 통해 웹에서 동작을 확인할 것이므로 넘어가도록 하겠다. 또한 ORM(Object Relational Mapping)을 활용한 DB사용은 후에 정리에서 따로 포스팅할 예정이다.

+ Recent posts