본문 바로가기

Django

[BlogApp] models.py 작성

 

from django.db import models

# Create your models here.
from django.urls import reverse


class Post(models.Model):
    title = models.CharField(verbose_name='TITLE', max_length=50)
    slug = models.SlugField('SLUG', unique=True, allow_unicode=True, help_text='one word for title alias')
    description = models.CharField('DESCRIPTION', max_length=100, blank=True, help_text='simple description text')
    content = models.TextField('CONTENT')
    created_dt = models.DateTimeField('CREATE DATE', auto_now_add=True)
    modify_dt = models.DateTimeField('MODIFY DATE', auto_now=True)

    class Meta:
        verbose_name = 'post'
        verbose_name_plural = 'posts'
        db_table = 'blog_posts'
        ordering = ('-modify_dt',)


    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('blog:post_detail', args=(self.slug,))

    def get_previous(self):
        return self.get_previous_by_modify_dt()

    def get_next(self):
        return self.get_next_by_modify_dt()

● title 필드

- CharField 이므로 한 줄로 입력됩니다.

- verbose_name: 컬럼에 대한 별칭으로 Admin 사이트에서 확인할 수 있습니다.

 

● slug 필드

- 여기서 slug 필드는 포스트 제목 별칭을 말합니다.

- unique 옵션을 추가해 기본 키 대신 사용합니다.

- allow_unicode 옵션을 추가하면 한글 처리가 가능합니다.

- help_text : 해당 컬럼을 설명해주는 문구로 Admin 사이트에서 확인할 수 있습니다.

 

● description 필드

- blank=true 옵션을 추가하면 빈칸 입력이 가능합니다.

 

● content 필드

- TextField는 여러 줄 입력이 가능합니다.

 

● create_dt 필드

- auto_now_add 옵션을 추가하면 객체가 생성될 때의 시각을 자동으로 기록하게 합니다.

 

● modify_dt 필드

- auto_now 옵션을 추가하면 데이터베이스에 저장될 때의 시각을 자동으로 기록하게 합니다.  즉, 객체가 변경될  때의 시각이 기록됩니다.

 

● class Meta:

- 필드 속성 외에 필요한 파라미터가 있으면 Meta 내부 클래스로 정의합니다.

 

● db_table = 'blog_posts'

- 디폴트 테이블 이름은 '앱명_모델클래스명'이 되므로 blog_post가 됩니다.

 

● ordering = ('-modify_dt',)

- 모델 객체의 리스트 출력 시 modify_dt 필드를 기준으로 내림차순으로 정렬합니다.

 

● 테이블을 클래스로 정의하는 ORM 기법을 쓰기 때문에 모델 클래스와 관련된 메소드도 같이 정의할 수 있습니다.

 

● def __str__(self):
            return self.title

- 객체를 문자열로 표현할 때 사용하는 함수입니다. 

 

● return reverse('blog:post_detail', args=(self.slug,))

- reverse 함수는 전달받은 인수와 매칭되는 url을 반환합니다.

- 매칭되는 url이 없으면 NoReverseMatch 예외가 발생합니다.

reverse('blog:post_list') # '/blog/'
reverse('blog:post_detail', args=[10]) # '/blog/10/' args 인자로 리스트 지정 필요
reverse('blog:post_detail', kwargs={'id':10}) # '/blog/10/'
reverse('/hello/') # NoReverseMatch 오류 발생

● get_previous_by_modify_dt()

- 장고 내장 함수로 ordering = ('-modify_dt',) 지정해주었으므로 최신 포스트를 반환합니다.

 

● get_next_by_modify_dt()

- -modify_dt 기준으로 예전 포스트를 반환합니다.

'Django' 카테고리의 다른 글

[BlogApp] admin.py 작성  (0) 2022.01.23
[BookmarkApp] admin.py 작성  (1) 2022.01.23
[Django] SlugField  (0) 2022.01.22
[BookmarkApp] models.py 작성  (0) 2022.01.13
[Django] 명령어  (0) 2022.01.13