Django @property란?

윤현묵·2023년 1월 10일
1

Django

목록 보기
15/17
post-thumbnail

@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값을 직접 이용한 정렬이 아니기 때문에 정렬해야하는 데이터가 많아질수록 동작하는 속도가 느려지는 단점이 있다.

profile
진정성 있는 개발자를 꿈꾼다

0개의 댓글