[Django] 모델 메소드(Model Method)

2024. 10. 8. 13:41·Minding's Programming/Django
728x90
반응형

모델 메소드

모델 메소드는 모델을 클래스로 선언할 때 아래에 작성하는 함수를 메소드로 사용하는 것을 말한다. 예를 들어, Question 모델(클래스)에 pub_date 기준 오늘 만들어진 레코드인지를 판단하는 메소드를 만들어본다고 해보자.

from django.db import models
from django.utils import timezone
from datetime import timedelta
import datetime

# model 생성
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField(auto_now_add=True)

	# pub_date가 지금 -1일 이상인 경우 True
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

 

Shell에서 해당 메소드를 사용해보자.

>>> from polls.models import *
# 예전에 만들었던 질문 레코드
>>> q = Question.objects.first()
>>> q.was_published_recently()
False

# 새로 만든 질문 레코드
>>> new_q = Question(question_text='new_question')
>>> new_q.save()
>>> new_q.was_published_recently()
True

 

해당 메소드를 다른 함수에 적용시켜 응용하는 것도 가능하다.

# model 생성
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField(auto_now_add=True)

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

    # was_published_recently() 함수가 True일 경우 뒤에 new 붙임
    def __str__(self):
        if self.was_published_recently():
            return f'[{self.pub_date}] {self.question_text} (new)'
        else:
            return f'[{self.pub_date}] {self.question_text}'
>>> from polls.models import *
>>> Question.objects.all()
<QuerySet [<Question: [2024-10-07 04:20:27+00:00] 가장 추천하는 가을 캠핑장은 어디인가요
?>, <Question: [2024-10-08 04:34:08.922218+00:00] new_question (new)>]>

위와 같이 new_question에만 (new) 표시가 노출되는 것을 확인할 수 있다.

728x90

'Minding's Programming > Django' 카테고리의 다른 글

[Django] 폼(Forms)  (0) 2024.10.08
[Django] 뷰(views)와 템플릿(templates)  (0) 2024.10.08
[Django] 모델 필터링(Model Filtering)  (2) 2024.10.07
[Django] Django Shell 사용해보기  (0) 2024.10.07
[Django] Django 기본 설정  (0) 2024.10.07
'Minding's Programming/Django' 카테고리의 다른 글
  • [Django] 폼(Forms)
  • [Django] 뷰(views)와 템플릿(templates)
  • [Django] 모델 필터링(Model Filtering)
  • [Django] Django Shell 사용해보기
Minding
Minding
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    mlb stats api
    메이저리그
    파이썬게임개발
    FastAPI
    데이터분석
    야구
    칼만필터는어렵지않아파이썬
    칼만필터
    AWS
    질롱코리아
    django
    데이터 엔지니어
    코딩테스트
    머신러닝
    딥러닝
    django python
    파이썬
    MLB
    칼만필터는어렵지않아
    칼만필터는어렵지않아python
    프로그래머스
    파이게임
    pygame
    Python
    KalmanFilter
    KBO
    Airflow
    넘파이
    게임개발
    에어플로우
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[Django] 모델 메소드(Model Method)
상단으로

티스토리툴바