[Python Django] 2. 글 모델링 하기
일련번호(id)는 Django에서 자동으로 만들어서 관리한다, 새로운 자료가 들어오면 알아서 가장 마지막 id 값에 1을 더해서 id를 마든다.
제목
제목(Title)은 문자형이다. Django 모델형에선 문자형을 CharField 와 TextField 라는 걸 나타낼 수 있다.
CharField는 256글자 (혹은 byte) 이하에서만 , TextField 는 그보다 훨씬 많은(긴) 글자를 써넣을 수 있다.
글 제목을 80 글자로 정하였으니 CharField를 쓰면 된다.
Title = models.CharField()
max_length를 써서 글자수를 제한할 수 있다.
Title = models.CharField(max_length=80, null=False)
제목을 반드시 입력해야 하게 설정할 수 있다.
null은 "값이 없다" 라고 생각하자. null = false 는 "값이 없음"을 허용하지 않겠다. 라는 뜻이다.
글 본문
글 작성일시(Created)를 사용한다. Created 역시 Django 에서 알맞는 자료형을 제공하는데, DateTimeField 이다.
created=models.DateTimeField()
글이 작성될 때 글 작성일시를 써넣는 방법은 2가지 이다.
1. 별돌 현재 시각을 알아내서 다른 글 정보와 함께 써넣는 것
2. 글 작성이라는 "행위"가 일어날 때 자동으로 시각을 알아내서 써넣은 것이다.
auto_now_add 옵션 : 데이터가 "처음" 만들어 질 때 (글이 처음 생성되어 저장할 때)
auto_now 옵션 : 데이터가 저장 될 때 (글을 고칠때 (update))
created=models.DateTimeField(auto_now_add =True, auto_now =True )
글 갈래(Category), 각 글 하나는 글 갈래 하나를 갖는다고 했다.
글 여러 개(many)가 글 갈래 하나(one)를 가리키는 것이다. Django 에서는 MANT-TO-ONE 관계형 이라고 한다.
생산 공장은 글 갈래, 자동차는 글이라고 할수 있다.
이런 MANY-TO-ONE 관계형을 Django 에서는 ForeignKey(외래키)로 정의한다.
Category = models.ForeignKey(Categories)
"Category 라는 요소(프로퍼티)는 Categories 라는 클래스 (모텔)을 외래키(MANY-TO-ONE) 가리킨다"꼬리표(Tags)는 글 갈래와 비슷하다. 글 여러 개(MANY)가 꼬리표 여러 개(MANY)와 연결된다고 했다.
이런 MANY-TO-MANY는 ManyToMantField로 할 수 있다.
Tags = models.ManyToManyField(TagModel)
Django는 ManyToMany 관계형이 있을 경우, 이 ManyToMany를 관리하는 DB 테이블을 따로 만들어 관리한다.
댓글 수(Comments)
댓글 수는 숫자형읶데, Django 모델에서 쓰는 숫자형은
1. 작은 숫자형 (IntegerField)
2. 큰 숫자형 (SmallIntegerField)
각 각은 0과 양수만 표현할 수 있는 숫자형과 음수도 함께 표현할 수 있는 숫자형으로 나뉜다. 위 두 숫자형은 음수도 표현할 수 있는 숫자형이며, 음수는 다루고 싶지 않다면 각 숫자형 이름 앞에 Positive를 붙여서 PositiveIntegerField 나 PositiveSmallIntegerField 라고 쓰면 된다.
" 어차피 사람 일이라는 것이 나중에 어떻게 될지 모르니 만약에 대비해서 음수도 표현할 수 있는 숫자형으로 하면 편하지 않나? "
양수와 음수 사용에 따라 컴퓨터 메모리에 차이가 발생한다. 음수든 양수든 각 숫자형은 다룰 수 있는 값 범위가 있다.
32비트 체제에서 가장 작은 숫자형 값 범위는 256인데 이는 -128 ~ 127 까지 표현할 수 있다. 그런데 이런 음수 구분을 하는 데에도 자리를 차지하는데 이 음수 구분을 없애 버리면 이 자리만큼 숫자를 더 표현할 수 있다.
댓글 수는 음수가 될 일이 없다. 그리고 수 억개 댓글이 달릴 일도 사실상 없다. 그러니 양수만 표현 할 수 있는 PositiveSmallInterger 를 쓰자.
Comments = models.PositiveSmallInteger(default=0, null=True)
default 는 값이 저장될 때 따로 넣는 값이 없을 때 자동으로 넣을 기본 값을 뜻한다. default=0은 따로 이 요소에 값을 지정하지 않을 경우 기본 값(default)으로 0을 넣겠다는 뜻이다.
이제 블로그 글 모델 구조를 다 잡았습니다.
class Entries(models.Model):
Title = models.ChardField(max_length=80 , null=False)
Content = models.TextField(null = False)
Created = models.DateTimeField
Category = models.ForeignKey(Categories)
Tags = models.ManyToManyField(TagModel)
Comments = models.PositiveSmallIntegerField(default=0, null=True)
Title = models.ChardField(max_length=80 , null=False)
Content = models.TextField(null = False)
Created = models.DateTimeField
Category = models.ForeignKey(Categories)
Tags = models.ManyToManyField(TagModel)
Comments = models.PositiveSmallIntegerField(default=0, null=True)
글 갈래 모델링 하기
글 모델에서 글 갈래 (Category) 정보를 글 갈래 모델에 연결해서 쓰고 있다.
Category = models.ForeignKey(Categories)
이 Categories 를 만들텐데, 이 Categories는 글 모델인 Entries 보다 먼저 선언이 되어야 한다.
파이썬은 소스 코드를 차례대로 읽기 때문에 Entries 모델(클래스)를 읽다가 models.ForeignKey(Categories)줄을 만들게 된다. 그런데 Catefories가 Entries 보다 밑에 있으면 당연히 이 줄에서 Categories 라는 개체가 없다면 어류가 나게 된다, 그래서 Categories 모델 정의를 Entries 위에 해야 한다.
class Categories(models.Model):
Categories 라는 클래스를 선언하는 것이다.
from django.db import models
class Categories(models.Model):
Title = models.CharField(maxlenth=40, null=false)
class Entries(models.Model):
~
class Categories(models.Model):
Title = models.CharField(maxlenth=40, null=false)
class Entries(models.Model):
~
글 꼬리표 모델링 하기
꼬리표(TagModel) 역시 글 갈래(Categorise)와 같은 개념으로 Entries 위에 있어야 하며, 꼬리표 이름만 있으면 된다,
class TagModel(models.Model):
Title = models.CharField(maxlength=20, null=False)
Title = models.CharField(maxlength=20, null=False)
댓글 모델링 하기
댓글 모델(Comments), 댓글 구조는
- 일련번호(id)
- 글쓴이(Name): 문자형 (20글자)
- 암호(Password): 문자형(32글자)
- 본문(Content): 문자형(200글자)
- 작성일(created): 날짜/시간형
- 가리키는 글 정보(Entry): 숫자형(그 글의 일련번호)
class Comments(models.Model):
Name = models.CharField(maxlength=20, null=False)
Password = models.CharField(maxlength=32, null=False)
Content = models.CharField(maxlength=32, null=False)
created = models.DateTimeField(auto_now_add=true, auto_now = True)
Name = models.CharField(maxlength=20, null=False)
Password = models.CharField(maxlength=32, null=False)
Content = models.CharField(maxlength=32, null=False)
created = models.DateTimeField(auto_now_add=true, auto_now = True)
가리키는 글 정보(Entry)는 글 갈래와 글 관계를 생각하면 된다. 댓글 여러 개느 (Many) 각 글 하나씩 (One)에 달려있다.
Entry = models.ForeignKey(Entries)
class Comments(models.Model): 이하 줄은 Entries 모델 아래 있어야 한다.
참고:http://www.hannal.net
'' 카테고리의 다른 글
[Python Djago] 4. 주소 체계 설정, admin 모드 설정 (0) | 2012.01.05 |
---|---|
[Python Djago] 파이썬 상식 ( 소스파일 인코딩 , 튜플 자료형 주의점) (0) | 2012.01.04 |
[Python Djago] 3. DB테이블로 만들기 (0) | 2012.01.04 |
[Python Django] 2. 글 모델링 하기 (0) | 2012.01.03 |
[Python Django] 1. 기초 문법과 데이터 모델링 (0) | 2012.01.02 |
댓글을 달아 주세요