티스토리 뷰
Model
MTV 패턴에서 데이터를 관리한다.
DB의 스키마에 해당하는 class를 만든다.
class를 만들면 migration과 migrate를 통해 table이 생성 된다.
이 떄 , class는 models.Model의 상속을 받는다.
커뮤니티에서 게시글과 사용자를 DB에 저장한다.
1. Scheme
각각의 열(column)이 어떤 type을 가지는지 미리 정의하는 것이다.
ex) 이름은 문자열만 받고 전화번호는 숫자만 받는다.
2. Table
하나의 DB는 여러개의 table이 존재한다.
ex) 엑셀로 치면 table하나는 sheet하나라고 생각하면 된다.
3. column/row
행 = 가로 = row = 레코드
열 = 세로 = column = 속성 = 필드
Model in django
데이터에 대한 단일 정보 소스로 fields(속성)과 behavior(method)를 포함한다
데이터베이스(table)
여러사람이 공유하여 체계화해 통합, 관리하는 데이터의 집합 스키마이다. 각각의 세로(colume)당 들어가는 속성(fields)이 다르다.
Migrations
모델의 변경사항들을 데이터베이스 스키마에 반영하는 방법
데이터베이스 스키마를 위한 버전관리 시스템이라고 생각하자(git과 비슷)
models.py(DB 모델링을 해보자)
class Article(models.Model):
title = models.CharField(max_length=140)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
= 을 기준으로
왼쪽 - table의 칼럼의 이름
오른쪽 - 데이터 Type에 맞게 Field를 정의
models.Model
models의 Model을 상속받아 Article이라는 클래스를 만들었다.
모델 클래스를 만들 떄 반드시 상속을 하도록 하자.
왜냐하면 앞으로 Article.object.all() 같은 것들로 데이터를 불러오거나 조작을 할 것이다.
이때, objet.all 은 내가 정의한 메서드가 아니라 Model을 상속 받았기 때문에 쓸 수 있는 method들이다.
title = models.CharField(max_length=140)
문자열을 저장+ 크기는 150이하
CharField는 max_length를 필수옵션으로 적어주어야 한다.
content = models.TextField()
내용은 textField이다. 보통 짧은 글을 쓸 경우는 CharField를 사용하고, 긴 글의 경우는 TextField를 사용한다.
CharField와 TextField 중 사용할 것을 선택하는 방법은 개발자가 받으려는 text의 크기에 따라 지정하면 된다.
created_at = models.DateTimeField(auto_now_add=True)
생성시간을 자동으로 저장한다.
+auto가 들어가는 것들은 가용자들이 직접 입력하지 못하게 내부적으로 만들어 져있다.
updated_at = models.DateTimeField(auto_now=True)
수정시간을 자동으로 저장한다.
+auto가 들어가는 것들은 가용자들이 직접 입력하지 못하게 내부적으로 만들어 져있다.
content = models.TextField
뒤에 ( )를 넣어주자. 왜냐하면 객체저장이 아닌 인스턴스 저장이기 때문이다.
DB 반영할 준비
python manage.py makemigrations
터미널에 치면 0001_initial.py 파일이 생성된다.
DB에 반영
python manage.py migrate
DB에 반영 됐는지 확인
admin.py
from .model import Article
admin.site.register(Article)
'Web > Django' 카테고리의 다른 글
[Django] 정적파일(STATIC_JavaScript, CSS, IMAGE) 넣기+ImageField(pillow, imagekit) (0) | 2020.07.02 |
---|---|
[django] CRUD 한번에 구현하기 (0) | 2020.06.30 |
[Django] Migration (0) | 2020.06.26 |
[Django] ORM (0) | 2020.06.24 |
[django] Form으로 사용자의 입력 받기+ModelForm (0) | 2020.06.22 |
- Total
- Today
- Yesterday
- vuejs
- 자연어처리
- nodejs
- Deque
- react autoFocus
- pandas
- logout
- Python
- Vue
- read_csv
- nextjs autoFocus
- django
- error:0308010C:digital envelope routines::unsupported
- BFS
- UserCreationForm
- TensorFlow
- 클라우데라
- useState
- 자료구조
- JavaScript
- NextJS
- react
- Express
- useHistory 안됨
- typescript
- DFS
- Queue
- next.config.js
- mongoDB
- login
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |