모델
장고는 모델(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사용은 후에 정리에서 따로 포스팅할 예정이다.
'Web > django' 카테고리의 다른 글
[python] 5.django(장고) - 기본요소 조회/템플릿 (0) | 2022.02.14 |
---|---|
[python] 4.django(장고) - 기본요소 admin (0) | 2022.02.12 |
[python] 2.django(장고) - 기본요소 URL/view (0) | 2022.02.12 |
[python] 1.django(장고) - 프로젝트 준비 (0) | 2022.02.12 |
[python] 0.django(장고) - Study 목적/내용/참고자료 (0) | 2022.02.11 |