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 |