Hi Hi

'Python null'에 해당되는 글 1건

  1. [Python Django] 2. 글 모델링 하기

[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)



글 갈래 모델링 하기

글 모델에서 글 갈래 (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):
    ~


글 꼬리표 모델링 하기

꼬리표(TagModel) 역시 글 갈래(Categorise)와 같은 개념으로 Entries 위에 있어야 하며, 꼬리표 이름만 있으면 된다,

class TagModel(models.Model):
   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)

가리키는 글 정보(Entry)는 글 갈래와 글 관계를 생각하면 된다. 댓글 여러 개느 (Many) 각 글 하나씩 (One)에 달려있다.

Entry = models.ForeignKey(Entries)

class Comments(models.Model): 이하 줄은 Entries 모델 아래 있어야 한다.


참고:http://www.hannal.net