Models
06_Model methods
모델에 method를 직접 만들어 보겠습니다. 직접 만든 method(=custom metod)는 직접 만드는 "행 수준"(row-level)의 기능을 개체(objects)에 추가하는데 사용합니다.
매니저 method가 "table-wide"한 것들을 의도하는 반면, 모델 method는 개별적인 모델 instance에서 작동합니다.
*method는 모델 안에서 작동하는 함수입니다.
이것은 한 곳(=특정 모델)에서 경제적인 로직을 유지하는 가치있는 기술입니다.
예를 들어, 아래의 모델에 있는 몇가지 custom method를 살펴봅시다.
from django.db import models
class Person(models.Model):
first_name = models.Charfield(max_length=50)
last_name = models.CharField(max_length=50)
birth_date = models.DateField()
def baby_boomer_status(self):
"Returns the person's baby-boomer status."
import datetime
if self.birth_date < datetime.date91945, 8, 1):
return "Pre-boomer"
elif self.birth_date < datetime.date(1965, 1, 1):
return "Baby boomer"
else:
return "Post-boomer"
def _get_full_name(self):
"Returns the person's full name."
return '%s %s' % (self.first_name, self.last_name)
full_name = property(_get_full_name)
위 예제의 마지막 method는 property입니다.
model instance reference 문서에 methods automatically given to each model의 완벽한 목록이 있습니다. 우리는 그 중 많은 것을 덮어 쓸 수 있습니다. 덮어쓰기를 원하는 경우 overriding predefined model methods를 참고하세요.
그리고 거의 대부분의 경우, 덮어쓰게 되는 내용들이 있습니다.
__str__( )
모든 개체의 "representation" 유니코드를 화면에 돌려주는 파이썬의 "magic method"입니다. 문자열이 그대로 나타나도록 강제되는, 그리고 표현되는 모델 객체일 때에도 장고나 파이썬이 사용될 수 있는 이유입니다. 대화형 콘솔이나 관리자 사이트에서 개체(object)를 화면에 나타나게 할때 가장 큰 효과를 느낄 수 있습니다.
우리는 거의 언제나 이 method를 사용하게 됩니다.
__unicode__( ) (python2)
(내용 생략)
get_absolute_url( )
이 method는 장고에게 어떻게 object로 가는 URL을 계산하는지 알려줍니다. 장고는 이 method를 장고의 관리자 인터페이스에 사용합니다. 그리고 장고가 어떤 object의 URL을 파악할 필요가 있을 때 사용합니다.
Any object that has a URL that uniquely identifies it should define this method.