@property 데코레이터는 메소드를 필드인 것처럼 사용할 수 있게 만들어주며 주로 model 클래스에서 사용한다.
예시
from django.db import models
class User(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
joined_date = models.DateField()
@property
def full_name(self):
return '%s %s' % (self.last_name, self.first_name)
위의 예시에서 User의 full name 필드가 없지만 views.py에서 User.full_name
으로 유저의 full_name을 불러올 수 있다.
하지만 full_name의 경우 실제 DB에 저장되어 있는 값이 아니기 때문에 DB의 값을 직접적으로 사용하는 기능은 사용할 수 없다.
User.objects.all().order_by('fullname') --> 사용 불가
sorted(User.objects.all(), key=lambda t:t.fullname)과 같이 사용해야 함
--> 하지만 DB값을 직접 이용한 정렬이 아니기 때문에 정렬해야하는 데이터가 많아질수록 동작하는 속도가 느려지는 단점이 있다.