django-4. 모델
January 28, 2018
models.py
모델은 데이터에 대한 단일 정보 소스로 저장중인 데이터의 필수 필드와 동작이 포함되어 있음.
각 모델은 단일 데이터베이스 테이블에 매핑됨. (모델을 저장하면 그 내용이 데이터 베이스에 저장 )
blog 를 위해서 간단하게 네가지 모델을 만들었다.
- Category
- Post
- Comment
- tagModel
모델을 생성하면 데이터 베이스에 blog_모델명으로 테이블이 생성되고, 데이터 베이스의 각 필드는 field 클래스의 인스턴스로 표현 됨.
from django.db import models
#다른 파일에 있는걸 추가하라는 뜻. django.utils 에 있는 timezone을 추가함.
from django.utils import timezone
# model(:객체)을 정의하는 코드
#클래스의 이름의 첫글자는 대문자로 써야 함. models는 Post가 장고 모델임을 읫미함.
#장고는 Post를 데이터베이스에 저장함.
class Board(models.Model):
title = models.CharField(max_length=40, null=False)
title_ko = models.CharField(max_length=40, null=False)
def __str__(self):
return self.title;
class TagModel(models.Model):
title = models.CharField(max_length=20, null=False)
class Post(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=200) #글자수가 제한된 텍스트 정의
content = models.TextField(default='')
boardCd = models.ForeignKey(Board, default=1)
hit = models.IntegerField(null=True, blank=True)
created_date = models.DateTimeField(default = timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
Tags = models.ManyToManyField(TagModel, blank=True)
comments = models.PositiveSmallIntegerField(default=0, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self): #__ = (dunder : double under score) _ _
return self.title
class Comment(models.Model):
post = models.ForeignKey(Post)
author = models.CharField(max_length=10)
author_ip = models.CharField(max_length=20, null=True)
password = models.CharField(max_length=20)
message = models.TextField(default='')
created_at = models.DateTimeField(default=timezone.now)
updated_at = models.DateTimeField(blank=True, null=True)
def publish(self):
self.updated_at = timezone.now()
self.save()
명령창에서 migration을 한다.
(myvenv) c:\django\mysite>python manage.py makemigrations
(myvenv) c:\django\mysite>python manage.py migrate
DB를 확인해 보면 내가 생성한 모델명으로 테이블이 생성되어 있는 것을 확인 할 수 있다.
생성한 모델을 admin페이지에서 컨트롤 할수 있도록 하자.
blog -> admin.py
from django_summernote.admin import SummernoteModelAdmin
from django.contrib import admin
# Register your models here.
from .models import Post,Category
class PostAdmin(SummernoteModelAdmin):
pass
class CategoryAdmin(admin.ModelAdmin):
pass
admin.site.register(Post, PostAdmin)
admin.site.register(Category)
admin 페이지에 들어가서 확인
이렇게 쉽게 관리자 페이지에 추가 할 수있다.
카테고리를 하나만들어서 post를 하나 추가해 보자 .
jango shell에서 post 가 생성되었는지 확인해 본다.
(myvenv) c:\django\mysite>python manage.py shell Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from blog.models import Post >>> Post.objects.all()