Django Model
개념
- 데이터를 관리하는 역할
- 데이터베이스에 저장할 테이블 정의
- 모델에 작성된 코드를 기준으로 데이터베이스 생성
특징
- 장고 내장 ORM
- 하나의 장고 프로젝트에 하나의 DB 사용
- Python Class & Database Table Mapping
Mode : DB Table과 Mapping
Model Instance : DB Table의 1 Row
Model field (모델 필드)
https://docs.djangoproject.com/en/4.0/ref/models/fields/#model-field-types
Model field reference | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
주요 Model field (모델 필드)
- CharField (str)
작거나 큰 문자열을 위한 문자열 필드
속성 : max_length,
- TextField (str)
긴 텍스트 필드
- BooleanField (bool)
참/거짓 필드
- DateTimeField (datetime)
datetime.datetime인스턴스로 표시되는 날짜 및 시간 필드
속성 : auto_now, auto_now_add
- IntegerField (int)
정수 필드(-2147483648to 값은 2147483647)
- FloatField (float)
부동 소수점 숫자 필드
Field Option (필드 속성)
https://docs.djangoproject.com/en/4.0/ref/models/fields/#field-options
Model field reference | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
주요 Field Option (필드 속성)
- [모든 field] null (True/False)
None을 허용 여부
- [모든 field] blank (True/False)
공백을 허용 여부
- [모든 field] choices (list(tubple()))
선택적인 값 입력
- [모든 field] default (field의 자료형 값)
기본적인 값을 지정
- [모든 field] unique (True/False)
해당 모델 간의 고유한 값의 여부
- [모든 field] verbose_name (str)
사용자에게 노출될 문구
- [Charfield] max_length (int)
최대 글자 수의 제한
게시글 만들기를 통한 이해
게시글 DB 만들기
- DB를 만들기 위해서 Model의 데이터형태와 이름을 지정을 한다.
from django.db import models
class post(models.Model):
image = models.ImageField(verbose_name='이미지')
content = models.TextField('내용')
created_at = models.DateTimeField('작성일')
view_count = models.IntegerField('조회수')
- models.py 파일에 내용을 추가하여 작성을 한다
Makemigrations
- migration을 만들기를 시도한다
SystemCheckError: System check identified some issues:
ERRORS:
m_test.post.image: (fields.E210) Cannot use ImageField because Pillow is not installed.
HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "python -m pip install Pillow".
- Error에 대한 대책으로 어떻게 해야할지 내용이 작성되어있다
설명에 따라서 Pillow를 설치를 한다
Pillow 설치
- command를 통해서 설치가 바로 가능하다
설치가 안 될 경우 따로 설치를 해줘야한다
전체에 설치를 하고 가상환경에 적용되는 별도의 방법 (거의 일어나지 않을 가능성)
create 완료 확인
- 만들어둔 결과물에 대한 확인을 한다
파일명에 따라 내용들이 잘 작성 되어있는지 확인한다
migrate
- model을 통한 DB를 만들기 위한 기능 실행
user 만들기 (Admin)
superuser 생성
- 접속을 하기 위해서는 계정이 있어서 사용자를 인식해주어야한다.
비밀번호는 쳐도 보이지 않지만 입력되고 있다.
이 패스워드는 관리자도 볼 수 없다. (암호화 처리)
확장을 통해서 DB 간단히 확인
SQLite 확장프로그램 설치
- query를 통해서 관계형 데이터를 확인할 수 있는 확장 프로그램이다.
다른 프로그램도 있지만 강의를 따라하기 위해서 사용한 프로그램
Database 열기
- 여는 방법은 간단하다.
확장프로그램을 통해서 이미 설치가 되어 있기 때문에 열기만 하면 된다
- 확장프로그램을 통한 Database 보기
데이터 결과값 보기 (예시)
- 그냥 열어보면 실제로 맞는지 확인이 안되기 때문에 결과값에 대해서 확인하는 것이 좋다
댓글 만들기를 통한 이해
댓글 model 추가
- 댓글 기능을 위한 Data를 넣을 공간 model 생성
from csv import writer
from django.db import models
# to=user 사용자와 연결하기 위한 import
from django.contrib.auth import get_user_model
User = get_user_model()
class post(models.Model):
image = models.ImageField(verbose_name='이미지', null=True, blank=True)
content = models.TextField('내용')
created_at = models.DateTimeField('작성일', auto_now_add=True)
view_count = models.IntegerField('조회수', default=0)
writer = models.ForeignKey(to=User, on_delete=models.CASCADE, null=True, blank=True)
class comment(models.Model):
content = models.TextField(verbose_name='내용')
create_at = models. DateTimeField(verbose_name='작성일')
post = models.ForeignKey(to='post', on_delete=models.CASCADE)
writer = models.ForeignKey(to=User, on_delete=models.CASCADE, null=True, blank=True)
추가된 테이블 확인
- 만들어진 결과물이 추가되어있는지 확인한다
Shell을 이용한 데이터 생성
Shell 실행
- 명령어 창을 통해서 실행
- shell command를 통한 데이터 추가
# App(m_test)의 Model.py 파일의 'post' class import
>>> from m_test.models import post
#
# 제대로 되었는지 import한 post 확인
>>> post
<class 'm_test.models.post'>
#
# models의 post
>>> post.objects.create(content='추가할 데이터 입력')
#
# 추가된 obect 확인
>>> post.objects.all()
<QuerySet [<post: post object (1)>, <post: post object (2)>, <post: post object (3)>, <post: post object (4)>, <post: post object (5)>]>
#
# Shell 끄기
>>> exit()
SQLite로 Data 확인
- 다르게 추가하는 방법 확인 결과
'학습 > [The-Origin][SW][Backend] Main Pag' 카테고리의 다른 글
[The Origin][백엔드] 3주차 (0) | 2023.01.05 |
---|---|
[The Origin][1차][Mission] 로또 번호 추출기 만들기 (0) | 2023.01.05 |
[The Origin][백엔드] 2주차 (0) | 2023.01.05 |
[The Origin][VSCODE][Django] 계산기 만들기를 통한 흐름의 이해 (0) | 2023.01.05 |
[The Origin][개발환경][설치] Pip 사용, Python 가상 환경, 장고 설치, 장고 사용하기 (0) | 2023.01.05 |