django-4. 모델

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

image

DB를 확인해 보면 내가 생성한 모델명으로 테이블이 생성되어 있는 것을 확인 할 수 있다.

image

생성한 모델을 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 페이지에 들어가서 확인

image

image

이렇게 쉽게 관리자 페이지에 추가 할 수있다.

카테고리를 하나만들어서 post를 하나 추가해 보자 .

image

image

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

image