Django 프로젝트를 개발하다보면 동일한 annotate를 각기 다른 view에서 호출하는 경우가 생기게 됩니다. 이럴 경우 유지보수가 어려워 지는 이슈가 발생하여 나중에 고생하게 될 수도 있습니다. 그래서 이런 이슈를 방지하고자 annotate를 관리하는 방법 중 하나를 소개하고자 합니다. annotate필드를 model.py의 class내에 class method로 관리하는 방법입니다.
class Sample(models.model):
first_name = models.CharField('이름', max_length=24)
last_name = models.CharField('성', max_length=12)
@classmethod
def get_annotated_field(cls):
return {
'full_name': Concat(
'first_name', V(' ('), 'last_name', V(')'),
output_field=CharField()
)
}
Sample.objects.create(first_name='first', last_name='last')
sample = Sample.objects.annotate(
full_name=Sample.get_annotated_fields()['full_name']
).order_by('-id')
sample.first().full_name
# first (last)
'python > Django' 카테고리의 다른 글
Django bulk_create/bulk_update (0) | 2022.11.16 |
---|---|
Django sitemap 분할 관리하기 (0) | 2022.10.13 |
Django Database Functions - Text functions (0) | 2022.10.11 |
Django csv streaminghttpresponse (0) | 2022.08.31 |
Django Database Functions - Date functions (0) | 2022.06.08 |
댓글